use serde::{Deserialize, Serialize};
use serde_repr::{Deserialize_repr, Serialize_repr};
use crate::module::{
character::model::CharacterType,
episode::model::Episode,
model::{Image, SimpleImage, Tag},
person::model::{PersonCareer, PersonType},
subject::model::SubjectType,
};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CollectionStats {
pub wish: Option<u32>,
pub collect: Option<u32>,
pub doing: Option<u32>,
pub on_hold: Option<u32>,
pub dropped: Option<u32>,
}
#[derive(Debug, Clone, Serialize_repr, Deserialize_repr)]
#[repr(u8)]
pub enum CollectionType {
Wish = 1,
Done = 2,
Doing = 3,
OnHold = 4,
Dropped = 5,
}
#[derive(Debug, Clone, Serialize_repr, Deserialize_repr)]
#[repr(u8)]
pub enum CollectionEpisodeType {
Not = 0,
Wish = 1,
Done = 2,
Dropped = 3,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CollectionSubjectUpdate {
pub r#type: Option<CollectionType>,
pub rate: Option<u32>,
pub ep_status: Option<u32>,
pub vol_status: Option<u32>,
pub comment: Option<String>,
pub private: Option<bool>,
pub tags: Option<Vec<String>>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CollectionEpisode {
pub episode: Episode,
pub r#type: CollectionEpisodeType,
pub updated_at: u32,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CollectionCharacter {
pub id: u32,
pub name: String,
pub r#type: CharacterType,
pub images: Option<SimpleImage>,
pub created_at: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CollectionPerson {
pub id: u32,
pub name: String,
pub r#type: PersonType,
pub career: Option<Vec<PersonCareer>>,
pub images: Option<SimpleImage>,
pub created_at: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CollectionSubject {
pub subject_id: u32,
pub subject_type: SubjectType,
pub rate: u32,
pub r#type: CollectionType,
pub comment: Option<String>,
pub tags: Vec<String>,
pub ep_status: u32,
pub vol_status: u32,
pub updated_at: String,
pub private: bool,
pub subject: Option<UserSubject>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct UserSubject {
pub id: u32,
pub r#type: SubjectType,
pub name: String,
pub name_cn: String,
pub short_summary: String,
pub date: String,
pub images: Image,
pub volumes: u32,
pub eps: u32,
pub collection_total: u32,
pub score: f64,
pub rank: u32,
pub tags: Vec<Tag>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CollectionEpisodesUpdate {
pub episode_id: Vec<u32>,
pub r#type: CollectionEpisodeType,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CollectionEpisodeUpdate {
pub r#type: CollectionEpisodeType,
}