use super::VideoData;
#[derive(Debug, serde::Deserialize, serde::Serialize, Clone)]
pub struct InitialData {
#[serde(rename = "responseContext")]
pub response_context: ResponseContext,
pub contents: Content,
pub header: SkippedFields,
pub metadata: PlaylistMetadata,
#[serde(rename = "trackingParams")]
pub tracking_params: String,
pub topbar: SkippedFields,
pub microformat: SkippedFields,
pub sidebar: SkippedFields,
#[serde(rename = "frameworkUpdates")]
pub framework_updates: Option<SkippedFields>,
}
#[derive(Debug, serde::Deserialize, serde::Serialize, Clone)]
pub struct PlaylistMetadata {
#[serde(rename = "playlistMetadataRenderer")]
playlist_metadata_render: PlaylistMetadataRenderer,
}
#[derive(Debug, serde::Deserialize, serde::Serialize, Clone)]
pub struct PlaylistMetadataRenderer {
pub title: String,
#[serde(rename = "androidAppindexingLink")]
pub android_appindexing_link: String,
#[serde(rename = "iosAppindexingLink")]
pub ios_appindexing_link: String,
}
#[derive(Debug, serde::Deserialize, serde::Serialize, Clone)]
pub struct Content {
#[serde(rename = "twoColumnBrowseResultsRenderer")]
pub two_column_browse_results_renderer: TwoColumnBrowseResultsRenderer,
}
#[derive(Debug, serde::Deserialize, serde::Serialize, Clone)]
pub struct ResponseContext {
#[serde(rename = "serviceTrackingParams")]
pub service_tracking_params: Vec<SkippedFields>,
#[serde(rename = "mainAppWebResponseContext")]
pub main_app_web_response_context: SkippedFields,
#[serde(rename = "webResponseContextExtensionData")]
pub web_response_context_extension_data: SkippedFields,
}
#[derive(Debug, serde::Deserialize, serde::Serialize, Clone)]
pub struct SkippedFields {}
#[derive(Debug, serde::Deserialize, serde::Serialize, Clone)]
pub struct TwoColumnBrowseResultsRenderer {
pub tabs: [TabsObject; 1],
}
#[derive(Debug, serde::Deserialize, serde::Serialize, Clone)]
pub struct TabsObject {
#[serde(rename = "tabRenderer")]
pub tab_renderer: TabRendererObject,
}
#[derive(Debug, serde::Deserialize, serde::Serialize, Clone)]
pub struct TabRendererObject {
pub selected: bool,
pub content: TabContent,
#[serde(rename = "trackingParams")]
pub tracking_params: String,
}
#[derive(Debug, serde::Deserialize, serde::Serialize, Clone)]
pub struct TabContent {
#[serde(rename = "sectionListRenderer")]
pub section_list_renderer: SectionListRenderer,
}
#[derive(Debug, serde::Deserialize, serde::Serialize, Clone)]
pub struct SectionListRenderer {
pub contents: (Content1, Content2),
#[serde(rename = "targetId")]
pub target_id: String,
#[serde(rename = "trackingParams")]
pub tracking_params: String,
}
#[derive(Debug, serde::Deserialize, serde::Serialize, Clone)]
pub struct Content1 {
#[serde(rename = "itemSectionRenderer")]
pub item_section_renderer: ItemSectionRenderer,
}
#[derive(Debug, serde::Deserialize, serde::Serialize, Clone)]
pub struct Content2 {
#[serde(rename = "continuationItemRenderer")]
pub continuation_item_renderer: SkippedFields,
}
#[derive(Debug, serde::Deserialize, serde::Serialize, Clone)]
pub struct ItemSectionRenderer {
pub contents: [PlaylistVideoListRendererContainer; 1],
#[serde(rename = "trackingParams")]
pub tracking_params: String,
}
#[derive(Debug, serde::Deserialize, serde::Serialize, Clone)]
pub struct PlaylistVideoListRendererContainer {
#[serde(rename = "playlistVideoListRenderer")]
pub playlist_video_list_renderer: PlaylistVideoListRenderer,
}
#[derive(Debug, serde::Deserialize, serde::Serialize, Clone)]
pub struct PlaylistVideoListRenderer {
pub contents: Vec<PlaylistVideoRenderer>,
#[serde(rename = "trackingParams")]
pub tracking_params: Option<String>,
#[serde(rename = "targetId")]
pub target_id: String,
#[serde(rename = "canReorder")]
pub can_reorder: bool,
#[serde(rename = "isEditable")]
pub is_editable: bool,
#[serde(rename = "playlistId")]
pub playlist_id: String,
}
#[derive(Debug, serde::Deserialize, serde::Serialize, Clone)]
pub enum PlaylistVideoRenderer {
#[serde(rename = "playlistVideoRenderer")]
PlaylistVideoRenderer(VideoData),
#[serde(rename = "continuationItemRenderer")]
ContinuationItemRenderer(SkippedFields),
}
impl PlaylistVideoRenderer {
pub fn filter_videos_data(self) -> Option<VideoData> {
match self {
PlaylistVideoRenderer::PlaylistVideoRenderer(v) => Some(v),
PlaylistVideoRenderer::ContinuationItemRenderer(_) => None,
}
}
}