animethemes_rs/
models.rs

1use serde::Deserialize;
2
3#[derive(Debug, Clone, Deserialize)]
4pub struct EntryMetadata {
5    pub id: u32,
6    pub created_at: String,
7    pub updated_at: String,
8    pub deleted_at: Option<String>,
9}
10
11#[derive(Debug, Clone, Deserialize)]
12pub struct Anime {
13    #[serde(flatten)]
14    pub meta: EntryMetadata,
15    pub name: String,
16    pub slug: String,
17    pub year: u16,
18    pub season: AnimeSeason,
19    pub synopsis: Option<String>,
20    #[serde(alias = "animesynonyms")]
21    pub synonyms: Option<Vec<AnimeSynonym>>,
22    #[serde(alias = "animethemes")]
23    pub themes: Option<Vec<Theme>>,
24    pub series: Option<Vec<Series>>,
25    pub resource: Option<Vec<Resource>>,
26    pub images: Option<Vec<Image>>,
27}
28
29#[derive(Debug, Clone, Deserialize)]
30pub enum AnimeSeason {
31    Winter,
32    Spring,
33    Summer,
34    Fall,
35}
36
37#[derive(Debug, Clone, Deserialize)]
38pub struct AnimeSynonym {
39    #[serde(flatten)]
40    pub meta: EntryMetadata,
41    pub text: String,
42    pub anime: Option<Anime>,
43}
44
45#[derive(Debug, Clone, Deserialize)]
46pub struct Theme {
47    #[serde(flatten)]
48    pub meta: EntryMetadata,
49    #[serde(alias = "type")]
50    pub theme_type: ThemeType,
51    #[serde(deserialize_with = "crate::utils::empty_string_as_none")]
52    pub sequence: Option<u16>,
53    pub group: Option<String>,
54    pub slug: String,
55    pub song: Option<Song>,
56    pub anime: Option<Anime>,
57    #[serde(alias = "animethemeentries")]
58    pub entries: Option<Vec<ThemeEntry>>,
59}
60
61#[derive(Debug, Clone, Deserialize)]
62pub enum ThemeType {
63    OP,
64    ED,
65}
66
67#[derive(Debug, Clone, Deserialize)]
68pub struct Song {
69    #[serde(flatten)]
70    pub meta: EntryMetadata,
71    pub title: String,
72    pub artists: Option<Vec<Artist>>,
73    #[serde(alias = "animethemes")]
74    pub themes: Option<Vec<Theme>>,
75}
76
77#[derive(Debug, Clone, Deserialize)]
78pub struct Artist {
79    #[serde(flatten)]
80    pub meta: EntryMetadata,
81    pub name: String,
82    pub slug: String,
83    #[serde(alias = "as")]
84    pub as_character: Option<String>,
85    pub songs: Option<Vec<Song>>,
86}
87
88#[derive(Debug, Clone, Deserialize)]
89pub struct ThemeEntry {
90    #[serde(flatten)]
91    pub meta: EntryMetadata,
92    #[serde(deserialize_with = "crate::utils::empty_string_as_none")]
93    pub version: Option<u32>,
94    pub episodes: Option<String>,
95    pub nsfw: bool,
96    pub spoiler: bool,
97    pub notes: Option<String>,
98    pub videos: Option<Vec<Video>>,
99    #[serde(alias = "animetheme")]
100    pub theme: Option<Theme>,
101}
102
103#[derive(Debug, Clone, Deserialize)]
104pub struct Video {
105    #[serde(flatten)]
106    pub meta: EntryMetadata,
107    pub basename: String,
108    pub filename: String,
109    pub path: String,
110    pub resolution: u32,
111    #[serde(alias = "nc")]
112    pub no_credits: bool,
113    pub subbed: bool,
114    pub lyrics: bool,
115    #[serde(alias = "uncen")]
116    pub uncensored: bool,
117    #[serde(deserialize_with = "crate::utils::empty_string_as_none")]
118    pub source: Option<VideoSource>,
119    pub overlap: VideoOverlap,
120    pub link: String,
121    #[serde(alias = "animethemeentries")]
122    pub entries: Option<Vec<ThemeEntry>>,
123    pub tags: Option<String>,
124}
125
126#[derive(Debug, Clone, Deserialize)]
127pub enum VideoSource {
128    WEB,
129    RAW,
130    BD,
131    DVD,
132    VHS,
133}
134
135#[derive(Debug, Clone, Deserialize)]
136pub enum VideoOverlap {
137    None,
138    Transition,
139    Over,
140}
141
142#[derive(Debug, Clone, Deserialize)]
143pub struct Series {
144    #[serde(flatten)]
145    pub meta: EntryMetadata,
146    pub name: String,
147    pub slug: String,
148    pub anime: Option<Vec<Anime>>,
149}
150
151#[derive(Debug, Clone, Deserialize)]
152pub struct Resource {
153    #[serde(flatten)]
154    pub meta: EntryMetadata,
155    pub link: String,
156    pub external_id: u32,
157    pub site: String,
158    #[serde(alias = "as")]
159    pub resource_as: Option<String>,
160    pub anime: Option<Vec<Anime>>,
161    pub artists: Option<Vec<Artist>>,
162}
163
164#[derive(Debug, Clone, Deserialize)]
165pub struct Image {
166    #[serde(flatten)]
167    pub meta: EntryMetadata,
168    pub path: String,
169    pub facet: ImageFacet,
170    pub anime: Option<Vec<Anime>>,
171    pub artists: Option<Vec<Artist>>,
172}
173
174#[derive(Debug, Clone, Deserialize)]
175pub enum ImageFacet {
176    #[serde(alias = "Small Cover")]
177    SmallCover,
178    #[serde(alias = "Large Cover")]
179    LargeCover,
180}
181
182#[derive(Debug, Clone, Deserialize)]
183pub struct SearchResponse {
184    pub anime: Option<Vec<Anime>>,
185    pub artists: Option<Vec<Artist>>,
186    pub series: Option<Vec<Series>>,
187    pub songs: Option<Vec<Song>>,
188    #[serde(alias = "animethemes")]
189    pub themes: Option<Vec<Theme>>,
190    pub videos: Option<Vec<Video>>,
191}