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 {
($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 {
pub fn $get (&self) -> Option<Arc<str>> {
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()),
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
});
music_tag_field!(artist set_artist remove_artist ItemKey::TrackArtist;
write = |value: Cow<str>|value.into();
parse = |value: &str|Ok::<String, ()>(value.trim()););
music_tag_field!(year set_year remove_year ItemKey::Year;
write = |value: u32|format!("{value}").into();
parse = |value: &str|value.trim().parse::<u32>(););
music_tag_field!(album set_album remove_album ItemKey::AlbumTitle;
write = |value: Cow<str>|value.into();
parse = |value: &str|Ok::<String, ()>(value.trim().into()););
music_tag_field!(track set_track remove_track ItemKey::TrackNumber;
write = |value: u32|format!("{value}").into();
parse = |value: &str|value.trim().parse::<u32>(););
music_tag_field!(title set_title remove_title ItemKey::TrackTitle;
write = |value: Cow<str>|value.into();
parse = |value: &str|Ok::<String, ()>(value.trim().into()););
music_tag_field! {
key = ItemKey::TrackArtist,
get = artist,
set = set_artist,
del = remove_artist,
write = |value: Cow<str>|value.into(),
parse = |value: &str|Ok::<String, ()>(value.trim()),
}
music_tag_field! {
key = ItemKey::Year,
get = year,
set = set_year,
del = remove_year,
write = |value: u32|format!("{value}").into(),
parse = |value: &str|value.trim().parse::<u32>(),
}
music_tag_field! {
key = ItemKey::AlbumTitle,
get = album,
set = set_album,
del = remove_album,
write = |value: Cow<str>|value.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()),
}