mirror of
https://codeberg.org/unspeaker/perch.git
synced 2025-12-06 01:26:43 +01:00
wip: clarify field macro signature
This commit is contained in:
parent
332869c5cb
commit
e8a7c0682c
1 changed files with 68 additions and 28 deletions
|
|
@ -211,8 +211,30 @@ macro_rules! generated_field {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
generated_field!(hash = |self|match self {
|
||||||
|
Metadata::Image { hash, .. } => Some(hash.clone()),
|
||||||
|
Metadata::Music { hash, .. } => Some(hash.clone()),
|
||||||
|
Metadata::Unknown { hash, .. } => Some(hash.clone()),
|
||||||
|
_ => None
|
||||||
|
});
|
||||||
|
|
||||||
|
generated_field!(size = |self|match self {
|
||||||
|
Metadata::Image { size, .. } => Some(size.clone()),
|
||||||
|
Metadata::Music { size, .. } => Some(size.clone()),
|
||||||
|
Metadata::Unknown { size, .. } => Some(size.clone()),
|
||||||
|
_ => None
|
||||||
|
});
|
||||||
|
|
||||||
macro_rules! music_tag_field {
|
macro_rules! music_tag_field {
|
||||||
($get:ident $set:ident $del:ident $key:expr; write = $write:expr; parse = $parse:expr;) => {
|
(
|
||||||
|
key = $key:expr,
|
||||||
|
get = $get:ident,
|
||||||
|
set = $set:ident,
|
||||||
|
del = $del:ident,
|
||||||
|
write = $write:expr,
|
||||||
|
parse = $parse:expr,
|
||||||
|
) => {
|
||||||
impl Entry {
|
impl Entry {
|
||||||
pub fn $get (&self) -> Option<Arc<str>> {
|
pub fn $get (&self) -> Option<Arc<str>> {
|
||||||
self.info.read().unwrap().$get()
|
self.info.read().unwrap().$get()
|
||||||
|
|
@ -326,30 +348,48 @@ macro_rules! music_tag_field {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
generated_field!(hash = |self|match self {
|
|
||||||
Metadata::Image { hash, .. } => Some(hash.clone()),
|
music_tag_field! {
|
||||||
Metadata::Music { hash, .. } => Some(hash.clone()),
|
key = ItemKey::TrackArtist,
|
||||||
Metadata::Unknown { hash, .. } => Some(hash.clone()),
|
get = artist,
|
||||||
_ => None
|
set = set_artist,
|
||||||
});
|
del = remove_artist,
|
||||||
generated_field!(size = |self|match self {
|
write = |value: Cow<str>|value.into(),
|
||||||
Metadata::Image { size, .. } => Some(size.clone()),
|
parse = |value: &str|Ok::<String, ()>(value.trim()),
|
||||||
Metadata::Music { size, .. } => Some(size.clone()),
|
}
|
||||||
Metadata::Unknown { size, .. } => Some(size.clone()),
|
|
||||||
_ => None
|
music_tag_field! {
|
||||||
});
|
key = ItemKey::Year,
|
||||||
music_tag_field!(artist set_artist remove_artist ItemKey::TrackArtist;
|
get = year,
|
||||||
write = |value: Cow<str>|value.into();
|
set = set_year,
|
||||||
parse = |value: &str|Ok::<String, ()>(value.trim()););
|
del = remove_year,
|
||||||
music_tag_field!(year set_year remove_year ItemKey::Year;
|
write = |value: u32|format!("{value}").into(),
|
||||||
write = |value: u32|format!("{value}").into();
|
parse = |value: &str|value.trim().parse::<u32>(),
|
||||||
parse = |value: &str|value.trim().parse::<u32>(););
|
}
|
||||||
music_tag_field!(album set_album remove_album ItemKey::AlbumTitle;
|
|
||||||
write = |value: Cow<str>|value.into();
|
music_tag_field! {
|
||||||
parse = |value: &str|Ok::<String, ()>(value.trim().into()););
|
key = ItemKey::AlbumTitle,
|
||||||
music_tag_field!(track set_track remove_track ItemKey::TrackNumber;
|
get = album,
|
||||||
write = |value: u32|format!("{value}").into();
|
set = set_album,
|
||||||
parse = |value: &str|value.trim().parse::<u32>(););
|
del = remove_album,
|
||||||
music_tag_field!(title set_title remove_title ItemKey::TrackTitle;
|
write = |value: Cow<str>|value.into(),
|
||||||
write = |value: Cow<str>|value.into();
|
parse = |value: &str|Ok::<String, ()>(value.trim().into()),
|
||||||
parse = |value: &str|Ok::<String, ()>(value.trim().into()););
|
}
|
||||||
|
|
||||||
|
music_tag_field! {
|
||||||
|
key = ItemKey::TrackNumber,
|
||||||
|
get = track,
|
||||||
|
set = set_track,
|
||||||
|
del = remove_track,
|
||||||
|
write = |value: u32|format!("{value}").into(),
|
||||||
|
parse = |value: &str|value.trim().parse::<u32>(),
|
||||||
|
}
|
||||||
|
|
||||||
|
music_tag_field! {
|
||||||
|
key = ItemKey::TrackTitle,
|
||||||
|
get = title,
|
||||||
|
set = set_title,
|
||||||
|
del = remove_title,
|
||||||
|
write = |value: Cow<str>|value.into(),
|
||||||
|
parse = |value: &str|Ok::<String, ()>(value.trim().into()),
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue