use crate::domain::entities::{AudioTrack, SubtitleTrack}; use crate::domain::value_objects::{SyncOffset, TrackId, TrackLanguage}; use serde::{Deserialize, Serialize}; /// Faixa externa adicionada pelo usuário ao projeto. #[derive(Clone, Debug, Serialize, Deserialize)] pub enum Track { Audio(AudioTrack), Subtitle(SubtitleTrack), } impl Track { pub fn id(&self) -> TrackId { match self { Track::Audio(t) => t.id, Track::Subtitle(t) => t.id, } } pub fn offset(&self) -> SyncOffset { match self { Track::Audio(t) => t.offset, Track::Subtitle(t) => t.offset, } } #[allow(dead_code)] pub fn language(&self) -> &TrackLanguage { match self { Track::Audio(t) => &t.language, Track::Subtitle(t) => &t.language, } } #[allow(dead_code)] pub fn set_offset(&mut self, offset: SyncOffset) { match self { Track::Audio(t) => t.offset = offset, Track::Subtitle(t) => t.offset = offset, } } #[allow(dead_code)] pub fn set_language(&mut self, language: TrackLanguage) { match self { Track::Audio(t) => t.language = language, Track::Subtitle(t) => t.language = language, } } /// Retorna o fator de escala temporal da faixa. pub fn drift_scale(&self) -> f64 { match self { Track::Audio(t) => t.drift_scale, Track::Subtitle(t) => t.drift_scale, } } /// Define o fator de escala temporal da faixa. pub fn set_drift_scale(&mut self, scale: f64) { match self { Track::Audio(t) => t.drift_scale = scale, Track::Subtitle(t) => t.drift_scale = scale, } } }