Compare commits
3 Commits
12c80c2f79
...
7ec174ed65
Author | SHA1 | Date | |
---|---|---|---|
7ec174ed65 | |||
bf17d5abf6 | |||
1b1c7708ef |
562
anime.rs
562
anime.rs
@ -1,562 +0,0 @@
|
||||
#[derive(Serialize, Deserialize, Debug)]
|
||||
pub struct Anime {
|
||||
pub mal_id: u32,
|
||||
pub url: String,
|
||||
pub images: AnimeImages,
|
||||
pub trailer: TrailerBase,
|
||||
pub approved: bool,
|
||||
pub titles: Vec<Title>,
|
||||
pub title: String,
|
||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||
pub title_english: Option<String>,
|
||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||
pub title_japanese: Option<String>,
|
||||
#[serde(default, skip_serializing_if = "Vec::is_empty")]
|
||||
pub title_synonyms: Vec<String>,
|
||||
#[serde(rename = "type", default, skip_serializing_if = "Option::is_none")]
|
||||
pub anime_type: Option<AnimeType>,
|
||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||
pub source: Option<String>,
|
||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||
pub episodes: Option<u32>,
|
||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||
pub status: Option<AnimeStatus>,
|
||||
pub airing: bool,
|
||||
pub aired: DateRange,
|
||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||
pub duration: Option<String>,
|
||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||
pub rating: Option<AnimeRating>,
|
||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||
pub score: Option<f32>,
|
||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||
pub scored_by: Option<u32>,
|
||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||
pub rank: Option<u32>,
|
||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||
pub popularity: Option<u32>,
|
||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||
pub members: Option<u32>,
|
||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||
pub favorites: Option<u32>,
|
||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||
pub synopsis: Option<String>,
|
||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||
pub background: Option<String>,
|
||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||
pub season: Option<AnimeSeason>,
|
||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||
pub year: Option<u32>,
|
||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||
pub broadcast: Option<Broadcast>,
|
||||
#[serde(default, skip_serializing_if = "Vec::is_empty")]
|
||||
pub producers: Vec<MalUrl>,
|
||||
#[serde(default, skip_serializing_if = "Vec::is_empty")]
|
||||
pub licensors: Vec<MalUrl>,
|
||||
#[serde(default, skip_serializing_if = "Vec::is_empty")]
|
||||
pub studios: Vec<MalUrl>,
|
||||
#[serde(default, skip_serializing_if = "Vec::is_empty")]
|
||||
pub genres: Vec<MalUrl>,
|
||||
#[serde(default, skip_serializing_if = "Vec::is_empty")]
|
||||
pub explicit_genres: Vec<MalUrl>,
|
||||
#[serde(default, skip_serializing_if = "Vec::is_empty")]
|
||||
pub themes: Vec<MalUrl>,
|
||||
#[serde(default, skip_serializing_if = "Vec::is_empty")]
|
||||
pub demographics: Vec<MalUrl>,
|
||||
}
|
||||
|
||||
#[derive(Serialize, Deserialize, Debug)]
|
||||
pub struct AnimeFull {
|
||||
pub mal_id: u32,
|
||||
pub url: String,
|
||||
pub images: AnimeImages,
|
||||
pub trailer: TrailerBase,
|
||||
pub approved: bool,
|
||||
pub titles: Vec<Title>,
|
||||
pub title: String,
|
||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||
pub title_english: Option<String>,
|
||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||
pub title_japanese: Option<String>,
|
||||
#[serde(default, skip_serializing_if = "Vec::is_empty")]
|
||||
pub title_synonyms: Vec<String>,
|
||||
#[serde(rename = "type", default, skip_serializing_if = "Option::is_none")]
|
||||
pub anime_type: Option<AnimeType>,
|
||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||
pub source: Option<String>,
|
||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||
pub episodes: Option<u32>,
|
||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||
pub status: Option<AnimeStatus>,
|
||||
pub airing: bool,
|
||||
pub aired: DateRange,
|
||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||
pub duration: Option<String>,
|
||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||
pub rating: Option<AnimeRating>,
|
||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||
pub score: Option<f32>,
|
||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||
pub scored_by: Option<u32>,
|
||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||
pub rank: Option<u32>,
|
||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||
pub popularity: Option<u32>,
|
||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||
pub members: Option<u32>,
|
||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||
pub favorites: Option<u32>,
|
||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||
pub synopsis: Option<String>,
|
||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||
pub background: Option<String>,
|
||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||
pub season: Option<AnimeSeason>,
|
||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||
pub year: Option<u32>,
|
||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||
pub broadcast: Option<Broadcast>,
|
||||
#[serde(default, skip_serializing_if = "Vec::is_empty")]
|
||||
pub producers: Vec<MalUrl>,
|
||||
#[serde(default, skip_serializing_if = "Vec::is_empty")]
|
||||
pub licensors: Vec<MalUrl>,
|
||||
#[serde(default, skip_serializing_if = "Vec::is_empty")]
|
||||
pub studios: Vec<MalUrl>,
|
||||
#[serde(default, skip_serializing_if = "Vec::is_empty")]
|
||||
pub genres: Vec<MalUrl>,
|
||||
#[serde(default, skip_serializing_if = "Vec::is_empty")]
|
||||
pub explicit_genres: Vec<MalUrl>,
|
||||
#[serde(default, skip_serializing_if = "Vec::is_empty")]
|
||||
pub themes: Vec<MalUrl>,
|
||||
#[serde(default, skip_serializing_if = "Vec::is_empty")]
|
||||
pub demographics: Vec<MalUrl>,
|
||||
#[serde(default, skip_serializing_if = "Vec::is_empty")]
|
||||
pub relations: Vec<Relation>,
|
||||
pub theme: Theme,
|
||||
#[serde(default, skip_serializing_if = "Vec::is_empty")]
|
||||
pub external: Vec<ExternalLink>,
|
||||
#[serde(default, skip_serializing_if = "Vec::is_empty")]
|
||||
pub streaming: Vec<ExternalLink>,
|
||||
}
|
||||
|
||||
pub type AnimeCharacters = Vec<AnimeCharacter>;
|
||||
|
||||
#[derive(Serialize, Deserialize, Debug)]
|
||||
pub struct AnimeCharacter {
|
||||
pub character: CharacterMeta,
|
||||
pub role: String,
|
||||
#[serde(default, skip_serializing_if = "Vec::is_empty")]
|
||||
pub voice_actors: Vec<VoiceActor>,
|
||||
}
|
||||
|
||||
#[derive(Serialize, Deserialize, Debug)]
|
||||
pub struct CharacterMeta {
|
||||
pub mal_id: u32,
|
||||
pub url: String,
|
||||
pub images: CharacterImages,
|
||||
pub name: String,
|
||||
}
|
||||
|
||||
#[derive(Serialize, Deserialize, Debug)]
|
||||
pub struct VoiceActor {
|
||||
pub person: PersonMeta,
|
||||
pub language: String,
|
||||
}
|
||||
|
||||
#[derive(Serialize, Deserialize, Debug)]
|
||||
pub struct PersonMeta {
|
||||
pub mal_id: u32,
|
||||
pub url: String,
|
||||
pub images: PeopleImages,
|
||||
pub name: String,
|
||||
}
|
||||
|
||||
pub type AnimeStaff = Vec<StaffRole>;
|
||||
|
||||
#[derive(Serialize, Deserialize, Debug)]
|
||||
pub struct StaffRole {
|
||||
pub person: PersonMeta,
|
||||
#[serde(default, skip_serializing_if = "Vec::is_empty")]
|
||||
pub positions: Vec<String>,
|
||||
}
|
||||
|
||||
pub type AnimeEpisodes = Vec<AnimeEpisode>;
|
||||
|
||||
#[derive(Serialize, Deserialize, Debug)]
|
||||
pub struct AnimeEpisode {
|
||||
pub mal_id: u32,
|
||||
pub url: String,
|
||||
pub title: String,
|
||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||
pub title_japanese: Option<String>,
|
||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||
pub title_romanji: Option<String>,
|
||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||
pub duration: Option<u32>,
|
||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||
pub aired: Option<String>,
|
||||
pub filler: bool,
|
||||
pub recap: bool,
|
||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||
pub forum_url: Option<String>,
|
||||
}
|
||||
|
||||
pub type AnimeNews = Vec<AnimeNewsMeta>;
|
||||
|
||||
#[derive(Serialize, Deserialize, Debug)]
|
||||
pub struct AnimeNewsMeta {
|
||||
pub mal_id: u32,
|
||||
pub url: String,
|
||||
pub title: String,
|
||||
pub date: String,
|
||||
pub author_username: String,
|
||||
pub author_url: String,
|
||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||
pub forum_url: Option<String>,
|
||||
pub images: CommonImages,
|
||||
pub comments: u32,
|
||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||
pub excerpt: Option<String>,
|
||||
}
|
||||
|
||||
pub type AnimeForumPosts = Vec<AnimeForumPost>;
|
||||
|
||||
#[derive(Serialize, Deserialize, Debug)]
|
||||
pub struct AnimeForumPost {
|
||||
pub mal_id: u32,
|
||||
pub url: String,
|
||||
pub title: String,
|
||||
pub date: Timestamp,
|
||||
pub author_username: String,
|
||||
pub author_url: String,
|
||||
pub comments: u32,
|
||||
pub last_comment: LastComment,
|
||||
}
|
||||
|
||||
#[derive(Serialize, Deserialize, Debug)]
|
||||
pub struct LastComment {
|
||||
pub url: String,
|
||||
pub author_username: String,
|
||||
pub author_url: String,
|
||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||
pub date: Option<Timestamp>,
|
||||
}
|
||||
|
||||
#[derive(Serialize, Deserialize, Debug)]
|
||||
pub struct AnimeVideos {
|
||||
#[serde(default, skip_serializing_if = "Vec::is_empty")]
|
||||
pub promo: Vec<PromoVideo>,
|
||||
#[serde(default, skip_serializing_if = "Vec::is_empty")]
|
||||
pub episodes: Vec<EpisodeVideo>,
|
||||
#[serde(default, skip_serializing_if = "Vec::is_empty")]
|
||||
pub music_videos: Vec<MusicVideo>,
|
||||
}
|
||||
|
||||
#[derive(Serialize, Deserialize, Debug)]
|
||||
pub struct PromoVideo {
|
||||
pub title: String,
|
||||
pub trailer: Trailer,
|
||||
}
|
||||
|
||||
pub type AnimeVideosEpisodes = Vec<EpisodeVideo>;
|
||||
|
||||
#[derive(Serialize, Deserialize, Debug)]
|
||||
pub struct EpisodeVideo {
|
||||
pub mal_id: u32,
|
||||
pub url: String,
|
||||
pub title: String,
|
||||
pub episode: String,
|
||||
pub images: CommonImages,
|
||||
}
|
||||
|
||||
#[derive(Serialize, Deserialize, Debug)]
|
||||
pub struct MusicVideo {
|
||||
pub title: String,
|
||||
pub video: Trailer,
|
||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||
pub meta: Option<MusicVideoMeta>,
|
||||
}
|
||||
|
||||
#[derive(Serialize, Deserialize, Debug)]
|
||||
pub struct MusicVideoMeta {
|
||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||
pub title: Option<String>,
|
||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||
pub author: Option<String>,
|
||||
}
|
||||
|
||||
pub type AnimePictures = Vec<AnimePicture>;
|
||||
|
||||
#[derive(Serialize, Deserialize, Debug)]
|
||||
pub struct AnimePicture {
|
||||
pub images: CommonImages,
|
||||
}
|
||||
|
||||
#[derive(Serialize, Deserialize, Debug)]
|
||||
pub struct AnimeStatistics {
|
||||
pub watching: u32,
|
||||
pub completed: u32,
|
||||
pub on_hold: u32,
|
||||
pub dropped: u32,
|
||||
pub plan_to_watch: u32,
|
||||
pub total: u32,
|
||||
#[serde(default, skip_serializing_if = "Vec::is_empty")]
|
||||
pub scores: Vec<Score>,
|
||||
}
|
||||
|
||||
#[derive(Serialize, Deserialize, Debug)]
|
||||
pub struct Score {
|
||||
pub score: u32,
|
||||
pub votes: u32,
|
||||
pub percentage: f32,
|
||||
}
|
||||
|
||||
#[derive(Serialize, Deserialize, Debug)]
|
||||
pub struct AnimeMoreInfo {
|
||||
pub moreinfo: Option<String>,
|
||||
}
|
||||
|
||||
pub type AnimeRecommendations = Vec<AnimeRecommendation>;
|
||||
|
||||
#[derive(Serialize, Deserialize, Debug)]
|
||||
pub struct AnimeRecommendation {
|
||||
pub mal_id: String,
|
||||
#[serde(default, skip_serializing_if = "Vec::is_empty")]
|
||||
pub entry: Vec<EntryMeta>,
|
||||
pub content: String,
|
||||
pub user: UserById,
|
||||
}
|
||||
|
||||
#[derive(Serialize, Deserialize, Debug)]
|
||||
pub struct EntryMeta {
|
||||
pub mal_id: u32,
|
||||
pub url: String,
|
||||
pub images: AnimeImages,
|
||||
pub title: String,
|
||||
}
|
||||
|
||||
#[derive(Serialize, Deserialize, Debug)]
|
||||
pub struct UserById {
|
||||
pub url: String,
|
||||
pub username: String,
|
||||
}
|
||||
|
||||
pub type AnimeUserUpdates = Vec<AnimeUserUpdate>;
|
||||
|
||||
#[derive(Serialize, Deserialize, Debug)]
|
||||
pub struct AnimeUserUpdate {
|
||||
pub user: UserMeta,
|
||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||
pub score: Option<u32>,
|
||||
pub status: String,
|
||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||
pub episodes_seen: Option<u32>,
|
||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||
pub episodes_total: Option<u32>,
|
||||
pub date: String,
|
||||
}
|
||||
|
||||
#[derive(Serialize, Deserialize, Debug)]
|
||||
pub struct UserMeta {
|
||||
pub username: String,
|
||||
pub url: String,
|
||||
pub images: UserImages,
|
||||
}
|
||||
|
||||
#[derive(Serialize, Deserialize, Debug)]
|
||||
pub struct ImageUrl {
|
||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||
pub image_url: Option<String>,
|
||||
}
|
||||
|
||||
pub type AnimeReviews = Vec<AnimeReview>;
|
||||
|
||||
#[derive(Serialize, Deserialize, Debug)]
|
||||
pub struct AnimeReview {
|
||||
pub mal_id: u32,
|
||||
pub url: String,
|
||||
#[serde(rename = "type")]
|
||||
pub review_type: String,
|
||||
pub reactions: Reactions,
|
||||
pub date: String,
|
||||
pub review: String,
|
||||
pub score: u32,
|
||||
#[serde(default, skip_serializing_if = "Vec::is_empty")]
|
||||
pub tags: Vec<String>,
|
||||
pub is_spoiler: bool,
|
||||
pub is_preliminary: bool,
|
||||
pub episodes_watched: u32,
|
||||
}
|
||||
|
||||
#[derive(Serialize, Deserialize, Debug)]
|
||||
pub struct Reactions {
|
||||
pub overall: u32,
|
||||
pub nice: u32,
|
||||
pub love_it: u32,
|
||||
pub funny: u32,
|
||||
pub confusing: u32,
|
||||
pub informative: u32,
|
||||
pub well_written: u32,
|
||||
pub creative: u32,
|
||||
}
|
||||
|
||||
pub type AnimeRelations = Vec<AnimeRelation>;
|
||||
|
||||
#[derive(Serialize, Deserialize, Debug)]
|
||||
pub struct AnimeRelation {
|
||||
pub relation: String,
|
||||
#[serde(default, skip_serializing_if = "Vec::is_empty")]
|
||||
pub entry: Vec<MalUrl>,
|
||||
}
|
||||
|
||||
#[derive(Serialize, Deserialize, Debug)]
|
||||
pub struct MalUrl {
|
||||
pub mal_id: u32,
|
||||
#[serde(rename = "type")]
|
||||
pub url_type: String,
|
||||
pub name: String,
|
||||
pub url: String,
|
||||
}
|
||||
|
||||
#[derive(Serialize, Deserialize, Debug)]
|
||||
pub struct AnimeThemes {
|
||||
pub data: Theme,
|
||||
}
|
||||
|
||||
#[derive(Serialize, Deserialize, Debug)]
|
||||
pub struct Theme {
|
||||
#[serde(default, skip_serializing_if = "Vec::is_empty")]
|
||||
pub openings: Vec<String>,
|
||||
#[serde(default, skip_serializing_if = "Vec::is_empty")]
|
||||
pub endings: Vec<String>,
|
||||
}
|
||||
|
||||
pub type AnimeExternal = Vec<ExternalLink>;
|
||||
pub type AnimeStreaming = Vec<ExternalLink>;
|
||||
|
||||
#[derive(Serialize, Deserialize, Debug)]
|
||||
pub struct ExternalLink {
|
||||
pub name: String,
|
||||
pub url: String,
|
||||
}
|
||||
|
||||
pub type AnimeSearchResults = Vec<Anime>;
|
||||
|
||||
#[derive(Serialize, Deserialize, Debug)]
|
||||
pub struct ImageUrls {
|
||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||
pub image_url: Option<String>,
|
||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||
pub small_image_url: Option<String>,
|
||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||
pub large_image_url: Option<String>,
|
||||
}
|
||||
|
||||
#[derive(Serialize, Deserialize, Debug)]
|
||||
pub struct TrailerBase {
|
||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||
pub youtube_id: Option<String>,
|
||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||
pub url: Option<String>,
|
||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||
pub embed_url: Option<String>,
|
||||
}
|
||||
|
||||
#[derive(Serialize, Deserialize, Debug)]
|
||||
pub struct Trailer {
|
||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||
pub youtube_id: Option<String>,
|
||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||
pub url: Option<String>,
|
||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||
pub embed_url: Option<String>,
|
||||
pub images: TrailerImages,
|
||||
}
|
||||
|
||||
#[derive(Serialize, Deserialize, Debug)]
|
||||
pub struct DateRange {
|
||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||
pub from: Option<String>,
|
||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||
pub to: Option<String>,
|
||||
pub prop: DateProp,
|
||||
}
|
||||
|
||||
#[derive(Serialize, Deserialize, Debug)]
|
||||
pub struct DateProp {
|
||||
pub from: DatePropDetail,
|
||||
pub to: DatePropDetail,
|
||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||
pub string: Option<String>,
|
||||
}
|
||||
|
||||
#[derive(Serialize, Deserialize, Debug)]
|
||||
pub struct DatePropDetail {
|
||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||
pub day: Option<u32>,
|
||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||
pub month: Option<u32>,
|
||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||
pub year: Option<u32>,
|
||||
}
|
||||
|
||||
#[derive(Serialize, Deserialize, Debug)]
|
||||
pub struct Broadcast {
|
||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||
pub day: Option<String>,
|
||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||
pub time: Option<String>,
|
||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||
pub timezone: Option<String>,
|
||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||
pub string: Option<String>,
|
||||
}
|
||||
|
||||
#[derive(Serialize, Deserialize, Debug)]
|
||||
pub struct Title {
|
||||
#[serde(rename = "type")]
|
||||
pub title_type: String,
|
||||
pub title: String,
|
||||
}
|
||||
|
||||
#[derive(Serialize, Deserialize, Debug)]
|
||||
pub struct CommonImages {
|
||||
pub jpg: ImageUrl,
|
||||
}
|
||||
|
||||
#[derive(Serialize, Deserialize, Debug)]
|
||||
pub struct CharacterImages {
|
||||
pub jpg: ImageUrl,
|
||||
pub webp: ImageUrl,
|
||||
}
|
||||
|
||||
#[derive(Serialize, Deserialize, Debug)]
|
||||
pub struct PeopleImages {
|
||||
pub jpg: ImageUrl,
|
||||
}
|
||||
|
||||
#[derive(Serialize, Deserialize, Debug)]
|
||||
pub struct AnimeImages {
|
||||
pub jpg: ImageUrls,
|
||||
pub webp: ImageUrls,
|
||||
}
|
||||
|
||||
#[derive(Serialize, Deserialize, Debug)]
|
||||
pub struct UserImages {
|
||||
pub jpg: ImageUrl,
|
||||
pub webp: ImageUrl,
|
||||
}
|
||||
|
||||
#[derive(Serialize, Deserialize, Debug)]
|
||||
pub struct TrailerImages {
|
||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||
pub image_url: Option<String>,
|
||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||
pub small_image_url: Option<String>,
|
||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||
pub medium_image_url: Option<String>,
|
||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||
pub large_image_url: Option<String>,
|
||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||
pub maximum_image_url: Option<String>,
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user