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}