use serde::ser::SerializeStruct;
use serde::{Deserialize, Serialize, Serializer};
use super::ImageMetadata;
use crate::parsers::{BitrateMode, CompressionMode};
use crate::results::MinimalFallback;
#[derive(Debug, Clone, Deserialize, Default)]
pub struct AudioMetadata {
pub duration_seconds: Option<f64>,
pub audio_codec: Option<String>,
pub audio_codec_profile: Option<String>,
pub audio_bitrate: Option<u64>,
pub audio_channels: Option<u32>,
pub audio_channel_layout: Option<String>,
pub audio_sample_rate: Option<u32>,
pub audio_language: Option<String>,
pub container_format: Option<String>,
pub audio_stream_size: Option<u64>,
pub creation_time: Option<String>,
pub title: Option<String>,
pub artist: Option<String>,
pub album: Option<String>,
pub track: Option<u32>,
pub track_total: Option<u32>,
pub year: Option<u32>,
pub genre: Option<String>,
pub album_artist: Option<String>,
pub bit_depth: Option<u32>,
pub compression_mode: Option<CompressionMode>,
pub encoded_library: Option<String>,
pub bit_rate_mode: Option<BitrateMode>,
pub comments: Option<String>,
pub artwork: Option<ImageMetadata>,
}
impl Serialize for AudioMetadata {
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where
S: Serializer,
{
let mut state = serializer.serialize_struct("AudioMetadata", 22)?;
crate::serialize_optional!(state, self.duration_seconds, "duration_seconds");
crate::serialize_optional!(state, self.audio_codec, "audio_codec");
crate::serialize_optional!(state, self.audio_codec_profile, "audio_codec_profile");
crate::serialize_optional!(state, self.audio_bitrate, "audio_bitrate");
crate::serialize_optional!(state, self.audio_channels, "audio_channels");
crate::serialize_optional!(state, self.audio_channel_layout, "audio_channel_layout");
crate::serialize_optional!(state, self.audio_sample_rate, "audio_sample_rate");
crate::serialize_optional!(state, self.audio_language, "audio_language");
crate::serialize_optional!(state, self.container_format, "container_format");
crate::serialize_optional!(state, self.audio_stream_size, "audio_stream_size");
crate::serialize_optional!(state, self.creation_time, "creation_time");
crate::serialize_optional!(state, self.title, "title");
crate::serialize_optional!(state, self.artist, "artist");
crate::serialize_optional!(state, self.album, "album");
crate::serialize_optional!(state, self.track, "track");
crate::serialize_optional!(state, self.track_total, "track_total");
crate::serialize_optional!(state, self.year, "year");
crate::serialize_optional!(state, self.genre, "genre");
crate::serialize_optional!(state, self.album_artist, "album_artist");
crate::serialize_optional!(state, self.bit_depth, "bit_depth");
crate::serialize_optional!(state, self.compression_mode, "compression_mode");
crate::serialize_optional!(state, self.encoded_library, "encoded_library");
crate::serialize_optional!(state, self.bit_rate_mode, "bit_rate_mode");
crate::serialize_optional!(state, self.comments, "comments");
crate::serialize_optional!(state, self.artwork, "artwork");
state.end()
}
}
crate::impl_minimal_fallback!(AudioMetadata, _);