use serde::{Deserialize, Serialize};
use super::genre::Genre;
#[non_exhaustive]
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct UnifiedMovie {
pub provider_id: String,
pub title: String,
pub original_title: Option<String>,
pub overview: Option<String>,
pub release_date: Option<String>,
pub poster_url: Option<String>,
pub backdrop_url: Option<String>,
pub genres: Vec<Genre>,
pub popularity: Option<f64>,
pub vote_average: Option<f64>,
pub vote_count: u64,
pub original_language: Option<String>,
pub adult: bool,
}
#[non_exhaustive]
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct UnifiedMovieDetails {
pub movie: UnifiedMovie,
pub tagline: Option<String>,
pub runtime: Option<u32>,
pub budget: Option<u64>,
pub revenue: Option<u64>,
pub status: Option<String>,
pub homepage: Option<String>,
pub imdb_id: Option<String>,
pub production_companies: Vec<String>,
pub production_countries: Vec<String>,
pub spoken_languages: Vec<String>,
pub video: bool,
pub belongs_to_collection: Option<String>,
}
#[non_exhaustive]
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct UnifiedTvShow {
pub provider_id: String,
pub name: String,
pub original_name: Option<String>,
pub overview: Option<String>,
pub first_air_date: Option<String>,
pub poster_url: Option<String>,
pub backdrop_url: Option<String>,
pub genres: Vec<Genre>,
pub popularity: Option<f64>,
pub vote_average: Option<f64>,
pub vote_count: u64,
pub original_language: Option<String>,
pub origin_country: Vec<String>,
pub adult: bool,
}
#[non_exhaustive]
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct UnifiedTvShowDetails {
pub show: UnifiedTvShow,
pub tagline: Option<String>,
pub number_of_seasons: u32,
pub number_of_episodes: u32,
pub in_production: bool,
pub status: Option<String>,
pub homepage: Option<String>,
pub networks: Vec<String>,
pub production_companies: Vec<String>,
pub last_air_date: Option<String>,
pub type_: Option<String>,
pub created_by: Vec<String>,
pub episode_run_time: Vec<u32>,
pub spoken_languages: Vec<String>,
pub production_countries: Vec<String>,
}
#[non_exhaustive]
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct UnifiedPerson {
pub provider_id: String,
pub name: String,
pub known_for_department: Option<String>,
pub profile_url: Option<String>,
pub popularity: Option<f64>,
pub gender: Option<i32>,
pub adult: bool,
}
#[non_exhaustive]
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct UnifiedPersonDetails {
pub person: UnifiedPerson,
pub biography: Option<String>,
pub birthday: Option<String>,
pub deathday: Option<String>,
pub place_of_birth: Option<String>,
pub imdb_id: Option<String>,
pub homepage: Option<String>,
pub also_known_as: Vec<String>,
}
#[non_exhaustive]
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub enum UnifiedSearchResult {
Movie(UnifiedMovie),
TvShow(UnifiedTvShow),
Person(UnifiedPerson),
}
#[non_exhaustive]
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct UnifiedSeasonDetails {
pub show_id: String,
pub season_number: u32,
pub name: Option<String>,
pub overview: Option<String>,
pub air_date: Option<String>,
pub poster_url: Option<String>,
pub episodes: Vec<UnifiedEpisode>,
}
#[non_exhaustive]
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct UnifiedEpisode {
pub episode_number: u32,
pub name: Option<String>,
pub overview: Option<String>,
pub air_date: Option<String>,
pub runtime: Option<u32>,
pub still_url: Option<String>,
pub vote_average: Option<f64>,
}
#[non_exhaustive]
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct UnifiedWatchProviders {
pub provider_id: String,
pub results: std::collections::HashMap<String, UnifiedWatchProviderEntry>,
}
#[non_exhaustive]
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
pub struct UnifiedWatchProviderEntry {
pub flatrate: Vec<UnifiedStreamingService>,
pub rent: Vec<UnifiedStreamingService>,
pub buy: Vec<UnifiedStreamingService>,
}
#[non_exhaustive]
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct UnifiedStreamingService {
pub name: String,
pub logo_url: Option<String>,
}