File size: 3,535 Bytes
3374e90
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
pub struct Image {
    pub url: String, pub layout: String,
    pub width: Option<u32>, pub height: Option<u32>, pub blurhash: Option<String>,
}

#[derive(Debug, Clone, Default, serde::Serialize, serde::Deserialize)]
pub struct ImageSet {
    pub low: Option<Image>, pub medium: Option<Image>, pub high: Option<Image>,
    pub backdrop: Option<Image>, pub logo: Option<Image>,
}

#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
pub struct LinkedId { pub source: String, pub id: String }

#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
pub struct MediaCard {
    pub id: String, pub title: String, pub kind: Option<String>,
    pub images: Option<ImageSet>, pub original_title: Option<String>,
    pub tagline: Option<String>, pub year: Option<String>,
    pub score: Option<u32>, pub genres: Vec<String>,
    pub status: Option<String>, pub content_rating: Option<String>,
    pub url: Option<String>, pub ids: Vec<LinkedId>, pub extra: Vec<(String, String)>,
}

#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
pub struct CategoryLink { pub id: String, pub title: String, pub subtitle: Option<String>, pub image: Option<Image> }

#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
pub struct HomeSection {
    pub id: String, pub title: String, pub subtitle: Option<String>,
    pub items: Vec<MediaCard>, pub next_page: Option<String>,
    pub layout: String, pub show_rank: bool,
    pub categories: Vec<CategoryLink>, pub extra: Vec<(String, String)>,
}

#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
pub struct PagedResult { pub items: Vec<MediaCard>, pub categories: Vec<CategoryLink>, pub next_page: Option<String> }

#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
pub struct SearchFilters { pub kind: Option<String>, pub page_token: Option<String>, pub fast_match: bool }

#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
pub struct Episode {
    pub id: String, pub title: String, pub number: Option<f64>, pub season: Option<f64>,
    pub images: Option<ImageSet>, pub description: Option<String>,
    pub released: Option<String>, pub score: Option<u32>,
    pub url: Option<String>, pub tags: Vec<String>, pub extra: Vec<(String, String)>,
}

#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
pub struct Season {
    pub id: String, pub title: String, pub number: Option<f64>,
    pub year: Option<u32>, pub episodes: Vec<Episode>,
}

#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
pub struct Person { pub id: String, pub name: String, pub image: Option<ImageSet>, pub role: Option<String>, pub url: Option<String> }

#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
pub struct MediaInfo {
    pub id: String, pub title: String, pub kind: String,
    pub images: Option<ImageSet>, pub original_title: Option<String>,
    pub description: Option<String>, pub score: Option<u32>,
    pub scored_by: Option<u64>, pub year: Option<String>,
    pub release_date: Option<String>, pub genres: Vec<String>,
    pub tags: Vec<String>, pub status: Option<String>,
    pub content_rating: Option<String>, pub seasons: Vec<Season>,
    pub cast: Vec<Person>, pub crew: Vec<Person>,
    pub runtime_minutes: Option<u32>, pub trailer_url: Option<String>,
    pub ids: Vec<LinkedId>, pub studio: Option<String>,
    pub country: Option<String>, pub language: Option<String>,
    pub url: Option<String>, pub extra: Vec<(String, String)>,
}