use melodium_core::{executive::*, *};
use melodium_macro::mel_data;
#[mel_data(traits(ToString Display Serialize Deserialize))]
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AudioInfo {
pub codec: string,
pub channels: u32,
pub sample_rate: u32,
pub duration_seconds: Option<f64>,
}
impl ToString for AudioInfo {
fn to_string(&self) -> string {
format!(
"AudioInfo {{ codec: {}, channels: {}, sample_rate: {}, duration_seconds: {:?} }}",
self.codec, self.channels, self.sample_rate, self.duration_seconds
)
}
}
impl Display for AudioInfo {
fn display(&self, f: &mut core::fmt::Formatter<'_>) -> Result<(), core::fmt::Error> {
write!(
f,
"codec={} channels={} sample_rate={}Hz",
self.codec, self.channels, self.sample_rate
)?;
if let Some(d) = self.duration_seconds {
write!(f, " duration={d:.3}s")?;
}
Ok(())
}
}