use crate::YoutubeFormatSource;
use ambassador::delegatable_trait;
#[delegatable_trait]
pub trait YoutubeResponseAlg {
type Error;
fn decode_youtube_watch(&self, bytes: &[u8]) -> Result<YoutubeWatchPage, Self::Error>;
fn decode_youtube_player(&self, bytes: &[u8]) -> Result<YoutubePlayer, Self::Error>;
}
#[derive(Clone, Debug, PartialEq, Eq)]
pub struct YoutubeWatchPage {
pub has_player_response: bool,
pub api_key: Option<String>,
pub player_url: Option<String>,
pub visitor_data: Option<String>,
pub title: Option<String>,
}
#[derive(Clone, Debug, PartialEq, Eq)]
pub struct YoutubeFormat {
pub id: String,
pub source: YoutubeFormatSource,
pub extension: Option<String>,
pub has_audio: bool,
pub has_video: bool,
pub quality: Option<String>,
pub width: Option<i64>,
pub height: Option<i64>,
pub bitrate: Option<i64>,
pub content_length: Option<i64>,
pub codecs: Option<String>,
}
#[derive(Clone, Debug, PartialEq, Eq)]
pub struct YoutubePlayer {
pub status: Option<String>,
pub reason: Option<String>,
pub title: Option<String>,
pub formats: Vec<YoutubeFormat>,
pub unreadable: usize,
}