1use serde::{Deserialize, Serialize};
2use serde_repr::{Deserialize_repr, Serialize_repr};
3
4use crate::module::{
5 character::model::CharacterType,
6 collection::model::CollectionStats,
7 model::{Image, InfoBox, SimpleImage},
8 person::model::{Person, PersonCareer, PersonType},
9};
10
11#[derive(Clone, Debug, PartialEq, Serialize_repr, Deserialize_repr)]
15#[repr(u8)]
16pub enum SubjectType {
17 Book = 1,
19 Anime = 2,
21 Music = 3,
23 Game = 4,
25 Real = 6,
27}
28
29#[derive(Clone, Debug, Serialize, Deserialize)]
33pub struct Subject {
34 pub id: u32,
36 pub r#type: SubjectType,
38 pub name: String,
40 pub name_cn: String,
42 pub summary: String,
44 pub series: bool,
46 pub nsfw: bool,
48 pub locked: bool,
50 pub date: Option<String>,
52 pub platform: String,
54 pub images: Image,
56 pub infobox: InfoBox,
58 pub volumes: u32,
60 pub eps: u32,
62 pub rating: Rating,
65 pub collection: CollectionStats,
67 pub meta_tags: Vec<String>,
69 pub tags: Vec<SubjectTag>,
71}
72
73#[derive(Clone, Debug, Serialize, Deserialize)]
77pub struct SubjectTag {
78 pub name: String,
80 pub count: u32,
82 pub total_cont: u32,
84}
85
86#[derive(Clone, Debug, Serialize, Deserialize)]
90pub struct DailyCalendarItem {
91 pub weekday: Weekday,
93 pub items: Vec<SubjectSmall>,
95}
96
97#[derive(Clone, Debug, Serialize, Deserialize)]
101pub struct Weekday {
102 pub en: String,
104 pub cn: String,
106 pub ja: String,
108 pub id: u8,
110}
111
112#[derive(Clone, Debug, Serialize, Deserialize)]
116pub struct SubjectSmall {
117 pub id: u32,
119 pub url: String,
121 pub r#type: SubjectType,
123 pub name: String,
125 pub name_cn: String,
127 pub summary: String,
129 pub air_date: String,
131 pub air_weekday: u8,
133 pub rating: Option<SubjectSmallRating>,
135 pub rank: Option<u32>,
137 pub images: Image,
139 pub collection: Option<CollectionStats>,
144}
145
146#[derive(Clone, Debug, Serialize, Deserialize)]
150pub struct SubjectSmallRating {
151 pub total: u32,
153 pub count: RatingCount,
155 pub score: f64,
157}
158
159#[derive(Clone, Debug, Serialize, Deserialize)]
163pub struct RatingCount {
164 #[serde(rename = "1")]
165 pub param_1: u32, #[serde(rename = "2")]
167 pub param_2: u32, #[serde(rename = "3")]
169 pub param_3: u32, #[serde(rename = "4")]
171 pub param_4: u32, #[serde(rename = "5")]
173 pub param_5: u32, #[serde(rename = "6")]
175 pub param_6: u32, #[serde(rename = "7")]
177 pub param_7: u32, #[serde(rename = "8")]
179 pub param_8: u32, #[serde(rename = "9")]
181 pub param_9: u32, #[serde(rename = "10")]
183 pub param_10: u32, }
185
186#[derive(Clone, Debug, Serialize, Deserialize)]
190pub struct SubjectSearch {
191 pub keyword: String,
193 pub sort: Option<SubjectSearchSort>,
195 pub filter: Option<SubjectSearchFilter>,
197}
198
199#[derive(Clone, Debug, Serialize, Deserialize)]
203#[serde(rename_all = "lowercase")]
204pub enum SubjectSearchSort {
205 Match, Heat, Rank, Score, }
210
211#[derive(Clone, Debug, Serialize, Deserialize)]
215pub struct SubjectSearchFilter {
216 pub r#type: Vec<SubjectType>,
218 pub meta_tags: Vec<String>,
220 pub tag: Vec<String>,
222 pub air_date: Vec<String>,
224 pub rating: Vec<String>,
226 pub rank: Vec<String>,
228 pub nsfw: bool,
230}
231
232#[derive(Clone, Debug, Serialize, Deserialize)]
236pub struct Rating {
237 pub rank: u32,
239 pub total: u32,
241 pub count: RatingCount,
243 pub score: f64,
245}
246
247#[derive(Debug, Clone, Serialize, Deserialize)]
251#[serde(untagged)]
252pub enum SubjectCategory {
253 Book(SubjectBookCategory), Anime(SubjectAnimeCategory), Game(SubjectGameCategory), Real(SubjectRealCategory), }
258
259#[derive(Debug, Clone, Serialize_repr, Deserialize_repr)]
263#[repr(u16)]
264pub enum SubjectBookCategory {
265 Other = 0, Comic = 1001, Novel = 1002, Artbook = 1003, }
270
271#[derive(Debug, Clone, Serialize_repr, Deserialize_repr)]
275#[repr(u16)]
276pub enum SubjectAnimeCategory {
277 Other = 0, Tv = 1, Ova = 2, Movie = 3, Web = 5, }
283
284#[derive(Debug, Clone, Serialize_repr, Deserialize_repr)]
288#[repr(u16)]
289pub enum SubjectGameCategory {
290 Other = 0, Game = 4001, Software = 4002, Expansion = 4003, BoardGame = 4005, }
296
297#[derive(Debug, Clone, Serialize_repr, Deserialize_repr)]
301#[repr(u16)]
302pub enum SubjectRealCategory {
303 Other = 0, JapaneseDrama = 1, EuroAmericanDrama = 2, ChineseDrama = 3, TvDrama = 6001, Movie = 6002, Performance = 6003, VarietyShow = 6004, }
312
313#[derive(Debug, Clone, Serialize, Deserialize)]
317#[serde(rename_all = "lowercase")]
318pub enum SubjectBrowseSort {
319 Date, Rank, }
322
323#[derive(Debug, Clone, Serialize, Deserialize)]
327pub struct SubjectPerson {
328 pub id: u32,
330 pub name: String,
332 pub r#type: PersonType,
334 pub career: Vec<PersonCareer>,
336 pub images: SimpleImage,
338 pub relation: String,
340 pub eps: String,
342}
343
344#[derive(Debug, Clone, Serialize, Deserialize)]
348pub struct SubjectCharacter {
349 pub id: u32,
351 pub name: String,
353 pub r#type: CharacterType,
355 pub images: SimpleImage,
357 pub relation: String,
359 pub actors: Vec<Person>,
361}
362
363#[derive(Debug, Clone, Serialize, Deserialize)]
367pub struct SubjectSubject {
368 pub id: u32,
370 pub r#type: SubjectType,
372 pub name: String,
374 pub name_cn: String,
376 pub images: Image,
378 pub relation: String,
380}