use serde::{Deserialize, Serialize}; #[derive(Debug, Serialize, Deserialize)] #[serde(untagged)] pub enum YtDlpItem { PlaylistItem { id: String, url: String, title: String, duration: Option, playlist_index: Option, }, VideoItem { id: String, webpage_url: String, title: String, duration: Option, }, } impl YtDlpItem { pub fn get_title(&self) -> &str { match self { YtDlpItem::PlaylistItem { title, .. } => title, YtDlpItem::VideoItem { title, .. } => title, } } pub fn get_url(&self) -> &str { match self { YtDlpItem::PlaylistItem { url, .. } => url, YtDlpItem::VideoItem { webpage_url, .. } => webpage_url, } } pub fn get_duration(&self) -> Option { match self { YtDlpItem::PlaylistItem { duration, .. } => *duration, YtDlpItem::VideoItem { duration, .. } => *duration, } } }