use serde::{Deserialize, Serialize};
use std::collections::BTreeMap;
#[derive(Serialize, Deserialize, Debug, Clone)]
pub enum ReleaseType {
#[serde(rename = "foreign-movie")]
ForeignMovie,
#[serde(rename = "soviet-cartoon")]
SovietCartoon,
#[serde(rename = "foreign-cartoon")]
ForeignCartoon,
#[serde(rename = "russian-cartoon")]
RussianCartoon,
#[serde(rename = "anime")]
Anime,
#[serde(rename = "russian-movie")]
RussianMovie,
#[serde(rename = "cartoon-serial")]
CartoonSerial,
#[serde(rename = "documentary-serial")]
DocumentarySerial,
#[serde(rename = "russian-serial")]
RussianSerial,
#[serde(rename = "foreign-serial")]
ForeignSerial,
#[serde(rename = "anime-serial")]
AnimeSerial,
#[serde(rename = "multi-part-film")]
MultiPartFilm,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub enum ReleaseQuality {
#[serde(rename = "BDRip")]
BdRip,
#[serde(rename = "BDRip 1080p")]
BdRip1080p,
#[serde(rename = "BDRip 720p")]
BdRip720p,
#[serde(rename = "CAMRip")]
CamRip,
#[serde(rename = "D-VHS")]
DVhs,
#[serde(rename = "DVBRip")]
DvbRip,
#[serde(rename = "DVBRip 720p")]
DvbRip720p,
#[serde(rename = "DVDRip")]
DvdRip,
#[serde(rename = "DVDSrc")]
DvdSrc,
#[serde(rename = "HDDVDRip")]
HddvdRip,
#[serde(rename = "HDDVDRip 1080p")]
HddvdRip1080p,
#[serde(rename = "HDDVDRip 720p")]
HddvdRip720p,
#[serde(rename = "HDRip")]
HdRip,
#[serde(rename = "HDRip 1080p")]
HdRip1080p,
#[serde(rename = "HDRip 720p")]
HdRip720p,
#[serde(rename = "HDTVRip")]
HdtvRip,
#[serde(rename = "HDTVRip 1080p")]
HdtvRip1080p,
#[serde(rename = "HDTVRip 720p")]
HdtvRip720p,
#[serde(rename = "IPTVRip")]
IptvRip,
#[serde(rename = "Laserdisc-RIP")]
LaserdiscRip,
#[serde(rename = "SATRip")]
SatRip,
#[serde(rename = "SuperTS")]
SuperTs,
#[serde(rename = "TS")]
Ts,
#[serde(rename = "TS 720p")]
Ts720p,
#[serde(rename = "TVRip")]
TvRip,
#[serde(rename = "TVRip 720p")]
TvRip720p,
#[serde(rename = "VHSRip")]
VhsRip,
#[serde(rename = "WEB-DLRip")]
WebDlRip,
#[serde(rename = "WEB-DLRip 1080p")]
WebDlRip1080p,
#[serde(rename = "WEB-DLRip 720p")]
WebDlRip720p,
#[serde(rename = "Workprint-AVC")]
WorkprintAvc,
#[serde(other)]
Unknown,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct Release {
pub id: String,
pub title: String,
pub title_orig: String,
pub other_title: Option<String>,
pub link: String,
pub year: i32,
pub kinopoisk_id: Option<String>,
pub imdb_id: Option<String>,
pub mdl_id: Option<String>,
pub worldart_link: Option<String>,
pub shikimori_id: Option<String>,
#[serde(rename = "type")]
pub release_type: ReleaseType,
pub quality: ReleaseQuality,
pub camrip: bool,
pub lgbt: bool,
pub translation: Translation,
pub created_at: String,
pub updated_at: String,
pub blocked_seasons: Option<BTreeMap<String, BlockedSeason>>,
pub seasons: Option<BTreeMap<String, Season>>,
pub last_season: Option<i32>,
pub last_episode: Option<i32>,
pub episodes_count: Option<i32>,
pub blocked_countries: Vec<String>,
pub material_data: Option<MaterialData>,
pub screenshots: Vec<String>,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub enum BlockedSeason {
All,
Episodes(Vec<String>),
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct Season {
pub title: Option<String>,
pub link: String,
pub episodes: BTreeMap<String, EpisodeUnion>,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
#[serde(untagged)]
pub enum EpisodeUnion {
Link(String),
Episode(Episode),
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct Episode {
pub title: Option<String>,
pub link: String,
pub screenshots: Vec<String>,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub enum TranslationType {
#[serde(rename = "subtitles")]
Subtitles,
#[serde(rename = "voice")]
Voice,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct Translation {
pub id: i32,
pub title: String,
#[serde(rename = "type")]
pub translation_type: TranslationType,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub enum AnimeKind {
#[serde(rename = "tv")]
Tv,
#[serde(rename = "movie")]
Movie,
#[serde(rename = "ova")]
Ova,
#[serde(rename = "ona")]
Ona,
#[serde(rename = "special")]
Special,
#[serde(rename = "music")]
Music,
#[serde(rename = "tv_13")]
Tv13,
#[serde(rename = "tv_24")]
Tv24,
#[serde(rename = "tv_48")]
Tv48,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub enum AllStatus {
#[serde(rename = "anons")]
Anons,
#[serde(rename = "ongoing")]
Ongoing,
#[serde(rename = "released")]
Released,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub enum AnimeStatus {
#[serde(rename = "anons")]
Anons,
#[serde(rename = "ongoing")]
Ongoing,
#[serde(rename = "released")]
Released,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub enum DramaStatus {
#[serde(rename = "anons")]
Anons,
#[serde(rename = "ongoing")]
Ongoing,
#[serde(rename = "released")]
Released,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub enum MppaRating {
#[serde(rename = "G")]
G,
#[serde(rename = "PG")]
Pg,
#[serde(rename = "PG-13")]
Pg13,
#[serde(rename = "R")]
R,
#[serde(rename = "R+")]
RPlus,
#[serde(rename = "Rx")]
Rx,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub enum MaterialDataField {
#[serde(rename = "kinopoisk_id")]
KinopoiskId,
#[serde(rename = "imdb_id")]
ImdbId,
#[serde(rename = "mdl_id")]
MdlId,
#[serde(rename = "worldart_link")]
WorldartLink,
#[serde(rename = "shikimori_id")]
ShikimoriId,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct MaterialData {
pub title: Option<String>,
pub anime_title: Option<String>,
pub title_en: Option<String>,
pub other_titles: Option<Vec<String>>,
pub other_titles_en: Option<Vec<String>>,
pub other_titles_jp: Option<Vec<String>>,
pub anime_license_name: Option<String>,
pub anime_licensed_by: Option<Vec<String>>,
pub anime_kind: Option<AnimeKind>,
pub all_status: Option<AllStatus>,
pub anime_status: Option<AnimeStatus>,
pub drama_status: Option<DramaStatus>,
pub year: Option<i32>,
pub tagline: Option<String>,
pub description: Option<String>,
pub anime_description: Option<String>,
pub poster_url: Option<String>,
pub screenshots: Option<Vec<String>>,
pub duration: Option<i32>,
pub countries: Option<Vec<String>>,
pub all_genres: Option<Vec<String>>,
pub genres: Option<Vec<String>>,
pub anime_genres: Option<Vec<String>>,
pub drama_genres: Option<Vec<String>>,
pub anime_studios: Option<Vec<String>>,
pub kinopoisk_rating: Option<f64>,
pub kinopoisk_votes: Option<i32>,
pub imdb_rating: Option<f64>,
pub imdb_votes: Option<i32>,
pub shikimori_rating: Option<f32>,
pub shikimori_votes: Option<i32>,
pub mydramalist_rating: Option<f32>,
pub mydramalist_votes: Option<i32>,
pub premiere_ru: Option<String>,
pub premiere_world: Option<String>,
pub aired_at: Option<String>,
pub released_at: Option<String>,
pub next_episode_at: Option<String>,
pub rating_mpaa: Option<MppaRating>,
pub minimal_age: Option<i32>,
pub episodes_total: Option<i32>,
pub episodes_aired: Option<i32>,
pub actors: Option<Vec<String>>,
pub directors: Option<Vec<String>>,
pub producers: Option<Vec<String>>,
pub writers: Option<Vec<String>>,
pub composers: Option<Vec<String>>,
pub editors: Option<Vec<String>>,
pub designers: Option<Vec<String>>,
pub operators: Option<Vec<String>>,
}