use crate::entity::SerpApiSearchResult;
use serde::{Deserialize, Serialize};
use serde_json::Value;
pub type SerpApiYoutubeOrganicTaskAdvanced = SerpApiSearchResult<SerpApiYoutubeOrganicItem>;
#[derive(Debug, Serialize, Deserialize, Clone)]
#[serde(tag = "type", rename_all = "snake_case")]
pub enum SerpApiYoutubeOrganicItem {
#[serde(rename = "youtube_video")]
YoutubeVideo(Box<SerpApiElementYoutubeVideo>),
#[serde(rename = "youtube_video_paid")]
YoutubeVideoPaid(Box<SerpApiElementYoutubeVideo>),
#[serde(rename = "youtube_channel")]
YoutubeChannel(Box<SerpApiElementYoutubeChannel>),
#[serde(rename = "youtube_playlist")]
YoutubePlaylist(Box<SerpApiElementYoutubePlaylist>),
#[serde(untagged)]
Unknown(Value),
}
#[derive(Debug, Default, Serialize, Deserialize, Clone)]
pub struct SerpApiElementYoutubeVideo {
#[serde(rename = "type")]
pub type_of_element: Option<String>,
pub rank_group: Option<i64>,
pub rank_absolute: Option<i64>,
pub block_rank: Option<i64>,
pub block_name: Option<String>,
pub title: Option<String>,
pub url: Option<String>,
pub video_id: Option<String>,
pub thumbnail_url: Option<String>,
pub channel_id: Option<String>,
pub channel_name: Option<String>,
pub channel_url: Option<String>,
pub channel_logo: Option<String>,
pub description: Option<String>,
pub highlighted: Option<Vec<String>>,
pub badges: Option<Vec<String>>,
pub is_live: Option<bool>,
pub is_shorts: Option<bool>,
pub is_movie: Option<bool>,
pub views_count: Option<i64>,
pub publication_date: Option<String>,
pub timestamp: Option<String>,
pub duration_time: Option<String>,
pub duration_time_seconds: Option<i64>,
}
#[derive(Debug, Default, Serialize, Deserialize, Clone)]
pub struct SerpApiElementYoutubeChannel {
#[serde(rename = "type")]
pub type_of_element: Option<String>,
pub rank_group: Option<i64>,
pub rank_absolute: Option<i64>,
pub block_rank: Option<i64>,
pub block_name: Option<String>,
pub channel_id: Option<String>,
pub name: Option<String>,
pub url: Option<String>,
pub logo: Option<String>,
pub video_count: Option<i64>,
pub is_verified: Option<bool>,
pub description: Option<String>,
pub highlighted: Option<Vec<String>>,
}
#[derive(Debug, Default, Serialize, Deserialize, Clone)]
pub struct SerpApiElementYoutubePlaylist {
#[serde(rename = "type")]
pub type_of_element: Option<String>,
pub rank_group: Option<i64>,
pub rank_absolute: Option<i64>,
pub block_rank: Option<i64>,
pub block_name: Option<String>,
pub title: Option<String>,
pub url: Option<String>,
pub playlist_id: Option<String>,
pub thumbnail_url: Option<String>,
pub channel_id: Option<String>,
pub channel_name: Option<String>,
pub channel_url: Option<String>,
pub channel_logo: Option<String>,
pub videos_count: Option<i64>,
pub preview_videos: Option<Vec<SerpApiElementYoutubePreviewVideo>>,
}
#[derive(Debug, Default, Serialize, Deserialize, Clone)]
pub struct SerpApiElementYoutubePreviewVideo {
pub video_id: Option<String>,
pub title: Option<String>,
pub url: Option<String>,
pub duration_time: Option<String>,
pub duration_time_second: Option<i64>,
}