wip: clarify field macro signature

This commit is contained in:
🪞👃🪞 2025-04-09 01:21:14 +03:00
parent 332869c5cb
commit e8a7c0682c

View file

@ -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()),
}