mirror of
https://github.com/Serial-ATA/lofty-rs
synced 2024-12-13 14:12:31 +00:00
simplify
This commit is contained in:
parent
0dca646968
commit
b955bb60c8
2 changed files with 46 additions and 20 deletions
|
@ -1,3 +1,17 @@
|
|||
#[macro_export]
|
||||
macro_rules! impl_audiotag_config {
|
||||
($tag:ident) => {
|
||||
impl AudioTagConfig for $tag {
|
||||
fn config(&self) -> &Config {
|
||||
&self.config
|
||||
}
|
||||
fn set_config(&mut self, config: Config) {
|
||||
self.config = config.clone();
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
#[macro_export]
|
||||
macro_rules! impl_tag {
|
||||
($tag:ident , $inner:ident) => {
|
||||
|
@ -17,13 +31,9 @@ macro_rules! impl_tag {
|
|||
})
|
||||
}
|
||||
}
|
||||
impl AudioTagCommon for $tag {
|
||||
fn config(&self) -> &Config {
|
||||
&self.config
|
||||
}
|
||||
fn set_config(&mut self, config: Config) {
|
||||
self.config = config.clone();
|
||||
}
|
||||
impl_audiotag_config!($tag);
|
||||
|
||||
impl IntoAnyTag for $tag {
|
||||
fn into_anytag(&self) -> AnyTag<'_> {
|
||||
self.into()
|
||||
}
|
||||
|
|
42
src/lib.rs
42
src/lib.rs
|
@ -101,7 +101,7 @@ impl Tag {
|
|||
}
|
||||
}
|
||||
|
||||
pub fn read_from_path(&self, path: impl AsRef<Path>) -> crate::Result<Box<dyn AudioTagEdit>> {
|
||||
pub fn read_from_path(&self, path: impl AsRef<Path>) -> crate::Result<Box<dyn AudioTag>> {
|
||||
match self.tag_type.unwrap_or(TagType::try_from_ext(
|
||||
path.as_ref()
|
||||
.extension()
|
||||
|
@ -231,32 +231,45 @@ pub struct AnyTag<'a> {
|
|||
pub total_discs: Option<u16>,
|
||||
}
|
||||
|
||||
// impl<'a> From<&'a AnyTag> for AnyTag<'a> {
|
||||
// fn from(inp: &'a AnyTag)
|
||||
// }
|
||||
|
||||
impl AudioTagConfig for AnyTag<'_> {
|
||||
fn config(&self) -> &Config {
|
||||
&self.config
|
||||
}
|
||||
fn set_config(&mut self, config: Config) {
|
||||
self.config = config.clone();
|
||||
}
|
||||
}
|
||||
|
||||
impl AnyTag<'_> {
|
||||
pub fn title(&self) -> Option<&str> {
|
||||
fn title(&self) -> Option<&str> {
|
||||
self.title.as_deref()
|
||||
}
|
||||
pub fn artists(&self) -> Option<&[&str]> {
|
||||
fn artists(&self) -> Option<&[&str]> {
|
||||
self.artists.as_deref()
|
||||
}
|
||||
pub fn year(&self) -> Option<i32> {
|
||||
fn year(&self) -> Option<i32> {
|
||||
self.year
|
||||
}
|
||||
pub fn album_title(&self) -> Option<&str> {
|
||||
fn album_title(&self) -> Option<&str> {
|
||||
self.album_title.as_deref()
|
||||
}
|
||||
pub fn album_artists(&self) -> Option<&[&str]> {
|
||||
fn album_artists(&self) -> Option<&[&str]> {
|
||||
self.album_artists.as_deref()
|
||||
}
|
||||
pub fn track_number(&self) -> Option<u16> {
|
||||
fn track_number(&self) -> Option<u16> {
|
||||
self.track_number
|
||||
}
|
||||
pub fn total_tracks(&self) -> Option<u16> {
|
||||
fn total_tracks(&self) -> Option<u16> {
|
||||
self.total_tracks
|
||||
}
|
||||
pub fn disc_number(&self) -> Option<u16> {
|
||||
fn disc_number(&self) -> Option<u16> {
|
||||
self.track_number
|
||||
}
|
||||
pub fn total_discs(&self) -> Option<u16> {
|
||||
fn total_discs(&self) -> Option<u16> {
|
||||
self.total_tracks
|
||||
}
|
||||
}
|
||||
|
@ -272,7 +285,7 @@ impl AnyTag<'_> {
|
|||
}
|
||||
}
|
||||
|
||||
pub trait AudioTag: AudioTagEdit + AudioTagWrite {}
|
||||
pub trait AudioTag: AudioTagEdit + AudioTagWrite + IntoAnyTag {}
|
||||
|
||||
// pub trait TagIo {
|
||||
// fn read_from_path(path: &str) -> crate::Result<AnyTag>;
|
||||
|
@ -282,7 +295,7 @@ pub trait AudioTag: AudioTagEdit + AudioTagWrite {}
|
|||
/// Implementors of this trait are able to read and write audio metadata.
|
||||
///
|
||||
/// Constructor methods e.g. `from_file` should be implemented separately.
|
||||
pub trait AudioTagEdit: AudioTagCommon {
|
||||
pub trait AudioTagEdit: AudioTagConfig {
|
||||
fn title(&self) -> Option<&str>;
|
||||
fn set_title(&mut self, title: &str);
|
||||
fn remove_title(&mut self);
|
||||
|
@ -404,9 +417,12 @@ pub trait AudioTagWrite {
|
|||
fn write_to_path(&mut self, path: &str) -> crate::Result<()>;
|
||||
}
|
||||
|
||||
pub trait AudioTagCommon {
|
||||
pub trait AudioTagConfig {
|
||||
fn config(&self) -> &Config;
|
||||
fn set_config(&mut self, config: Config);
|
||||
}
|
||||
|
||||
pub trait IntoAnyTag {
|
||||
fn into_anytag(&self) -> AnyTag<'_>;
|
||||
|
||||
/// Convert the tag type, which can be lossy.
|
||||
|
|
Loading…
Reference in a new issue