From e8a7c0682c09d42311ca4a1e491ea61bd1499962 Mon Sep 17 00:00:00 2001 From: unspeaker Date: Wed, 9 Apr 2025 01:21:14 +0300 Subject: [PATCH] wip: clarify field macro signature --- src/model/entry.rs | 96 ++++++++++++++++++++++++++++++++-------------- 1 file changed, 68 insertions(+), 28 deletions(-) diff --git a/src/model/entry.rs b/src/model/entry.rs index 50b8e3a..58637b4 100644 --- a/src/model/entry.rs +++ b/src/model/entry.rs @@ -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> { 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|value.into(); - parse = |value: &str|Ok::(value.trim());); -music_tag_field!(year set_year remove_year ItemKey::Year; - write = |value: u32|format!("{value}").into(); - parse = |value: &str|value.trim().parse::();); -music_tag_field!(album set_album remove_album ItemKey::AlbumTitle; - write = |value: Cow|value.into(); - parse = |value: &str|Ok::(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::();); -music_tag_field!(title set_title remove_title ItemKey::TrackTitle; - write = |value: Cow|value.into(); - parse = |value: &str|Ok::(value.trim().into());); + +music_tag_field! { + key = ItemKey::TrackArtist, + get = artist, + set = set_artist, + del = remove_artist, + write = |value: Cow|value.into(), + parse = |value: &str|Ok::(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::(), +} + +music_tag_field! { + key = ItemKey::AlbumTitle, + get = album, + set = set_album, + del = remove_album, + write = |value: Cow|value.into(), + parse = |value: &str|Ok::(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::(), +} + +music_tag_field! { + key = ItemKey::TrackTitle, + get = title, + set = set_title, + del = remove_title, + write = |value: Cow|value.into(), + parse = |value: &str|Ok::(value.trim().into()), +}