use serde::{Deserialize, Serialize};
use serde_repr::{Deserialize_repr, Serialize_repr};
use crate::module::{
character::model::CharacterType,
collection::model::CollectionStats,
model::{Image, InfoBox, SimpleImage},
person::model::{Person, PersonCareer, PersonType},
};
#[derive(Clone, Debug, PartialEq, Serialize_repr, Deserialize_repr)]
#[repr(u8)]
pub enum SubjectType {
Book = 1,
Anime = 2,
Music = 3,
Game = 4,
Real = 6,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct Subject {
pub id: u32,
pub r#type: SubjectType,
pub name: String,
pub name_cn: String,
pub summary: String,
pub series: bool,
pub nsfw: bool,
pub locked: bool,
pub date: Option<String>,
pub platform: String,
pub images: Image,
pub infobox: InfoBox,
pub volumes: u32,
pub eps: u32,
pub rating: Rating,
pub collection: CollectionStats,
pub meta_tags: Vec<String>,
pub tags: Vec<SubjectTag>,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct SubjectTag {
pub name: String,
pub count: u32,
pub total_cont: u32,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct DailyCalendarItem {
pub weekday: Weekday,
pub items: Vec<SubjectSmall>,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct Weekday {
pub en: String,
pub cn: String,
pub ja: String,
pub id: u8,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct SubjectSmall {
pub id: u32,
pub url: String,
pub r#type: SubjectType,
pub name: String,
pub name_cn: String,
pub summary: String,
pub air_date: String,
pub air_weekday: u8,
pub rating: Option<SubjectSmallRating>,
pub rank: Option<u32>,
pub images: Image,
pub collection: Option<CollectionStats>,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct SubjectSmallRating {
pub total: u32,
pub count: RatingCount,
pub score: f64,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct RatingCount {
#[serde(rename = "1")]
pub param_1: u32, #[serde(rename = "2")]
pub param_2: u32, #[serde(rename = "3")]
pub param_3: u32, #[serde(rename = "4")]
pub param_4: u32, #[serde(rename = "5")]
pub param_5: u32, #[serde(rename = "6")]
pub param_6: u32, #[serde(rename = "7")]
pub param_7: u32, #[serde(rename = "8")]
pub param_8: u32, #[serde(rename = "9")]
pub param_9: u32, #[serde(rename = "10")]
pub param_10: u32, }
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct SubjectSearch {
pub keyword: String,
pub sort: Option<SubjectSearchSort>,
pub filter: Option<SubjectSearchFilter>,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum SubjectSearchSort {
Match, Heat, Rank, Score, }
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct SubjectSearchFilter {
pub r#type: Vec<SubjectType>,
pub meta_tags: Vec<String>,
pub tag: Vec<String>,
pub air_date: Vec<String>,
pub rating: Vec<String>,
pub rank: Vec<String>,
pub nsfw: bool,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct Rating {
pub rank: u32,
pub total: u32,
pub count: RatingCount,
pub score: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(untagged)]
pub enum SubjectCategory {
Book(SubjectBookCategory), Anime(SubjectAnimeCategory), Game(SubjectGameCategory), Real(SubjectRealCategory), }
#[derive(Debug, Clone, Serialize_repr, Deserialize_repr)]
#[repr(u16)]
pub enum SubjectBookCategory {
Other = 0, Comic = 1001, Novel = 1002, Artbook = 1003, }
#[derive(Debug, Clone, Serialize_repr, Deserialize_repr)]
#[repr(u16)]
pub enum SubjectAnimeCategory {
Other = 0, Tv = 1, Ova = 2, Movie = 3, Web = 5, }
#[derive(Debug, Clone, Serialize_repr, Deserialize_repr)]
#[repr(u16)]
pub enum SubjectGameCategory {
Other = 0, Game = 4001, Software = 4002, Expansion = 4003, BoardGame = 4005, }
#[derive(Debug, Clone, Serialize_repr, Deserialize_repr)]
#[repr(u16)]
pub enum SubjectRealCategory {
Other = 0, JapaneseDrama = 1, EuroAmericanDrama = 2, ChineseDrama = 3, TvDrama = 6001, Movie = 6002, Performance = 6003, VarietyShow = 6004, }
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum SubjectBrowseSort {
Date, Rank, }
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SubjectPerson {
pub id: u32,
pub name: String,
pub r#type: PersonType,
pub career: Vec<PersonCareer>,
pub images: SimpleImage,
pub relation: String,
pub eps: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SubjectCharacter {
pub id: u32,
pub name: String,
pub r#type: CharacterType,
pub images: SimpleImage,
pub relation: String,
pub actors: Vec<Person>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SubjectSubject {
pub id: u32,
pub r#type: SubjectType,
pub name: String,
pub name_cn: String,
pub images: Image,
pub relation: String,
}