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