edar 0.1.1

A tool to extract metadata from an audio file
Documentation
use std::{fmt, time::Duration};

pub mod extractor;

pub use extractor::Extractor;

#[derive(Debug, Clone, Default)]
pub struct Metadata {
    pub title: Option<String>,
    pub artist: Option<String>,
    pub album: Option<String>,
    pub year: Option<String>,
    pub genre: Option<String>,
    pub cover: Option<Vec<u8>>,

    pub duration: Option<Duration>,
    pub sample_rate: Option<u32>,
    pub channels: Option<u8>,
}
#[derive(Debug)]
pub enum MetadataError {
    UnsupportedFormat,
    ReadError,
    ExtensionError,
    NoTag,
}

impl fmt::Display for Metadata {
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
        writeln!(f, "{}", self.title.as_deref().unwrap_or(""))?;
        writeln!(f, "{}", self.artist.as_deref().unwrap_or(""))?;
        writeln!(f, "{}", self.album.as_deref().unwrap_or(""))?;
        writeln!(f, "{}", self.year.as_deref().unwrap_or(""))?;
        writeln!(f, "{}", self.genre.as_deref().unwrap_or(""))?;
        Ok(())
    }
}

pub trait FormatDuration {
    fn format(&self) -> String;
}

impl FormatDuration for Option<Duration> {
    fn format(&self) -> String {
        match self {
            Some(duration) => {
                let minutes = duration.as_secs() / 60;
                let seconds = duration.as_secs() % 60;
                format!("{:02}:{:02}", minutes, seconds)
            }
            None => "00:00".to_string(),
        }
    }
}