use crate::YoutubeSorts;
use ambassador::delegatable_trait;
#[delegatable_trait]
pub trait YoutubeRequestAlg: YoutubeSorts {
fn watch_request(&self, url: impl Into<String>) -> Self::Request;
fn player_request(&self, id: impl Into<String>, api_key: impl Into<String>, claim: &PlayerClaim) -> Self::Request;
fn player_program_request(&self, url: impl Into<String>) -> Self::Request;
fn media_request(&self, url: impl Into<String>) -> Self::Request;
}
#[derive(Clone, Debug, Default, PartialEq, Eq)]
pub struct PlayerClaim {
pub client: String,
pub visitor: Option<String>,
pub timestamp: Option<i64>,
}
#[delegatable_trait]
pub trait YoutubeClientAlg {
fn player_clients(&self) -> impl Iterator<Item = &str>;
}
#[delegatable_trait]
pub trait YoutubeProgramAlg {
fn program_timestamp(&self, program: &str) -> Option<i64>;
}
#[delegatable_trait]
pub trait YoutubeRequestBytesAlg: YoutubeSorts {
type Error;
fn youtube_request_bytes(&self, request: &Self::Request) -> Result<Vec<u8>, Self::Error>;
}