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
use serde::{Deserialize, Serialize};
use std::collections::HashMap;
use std::time::Duration;
use crate::{
custom_serde::duration_ms, CopyrightType, DatePrecision, EpisodeId, Image, Page, ShowId,
};
#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)]
pub struct Copyright {
pub text: String,
#[serde(rename = "type")]
pub _type: CopyrightType,
}
#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)]
pub struct SimplifiedShow {
pub available_markets: Vec<String>,
pub copyrights: Vec<Copyright>,
pub description: String,
pub explicit: bool,
pub external_urls: HashMap<String, String>,
pub href: String,
pub id: ShowId,
pub images: Vec<Image>,
pub is_externally_hosted: Option<bool>,
pub languages: Vec<String>,
pub media_type: String,
pub name: String,
pub publisher: String,
}
#[derive(Deserialize)]
pub struct SeversalSimplifiedShows {
pub shows: Vec<SimplifiedShow>,
}
#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)]
pub struct Show {
pub added_at: String,
pub show: SimplifiedShow,
}
#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
pub struct FullShow {
pub available_markets: Vec<String>,
pub copyrights: Vec<Copyright>,
pub description: String,
pub explicit: bool,
pub episodes: Page<SimplifiedEpisode>,
pub external_urls: HashMap<String, String>,
pub href: String,
pub id: ShowId,
pub images: Vec<Image>,
pub is_externally_hosted: Option<bool>,
pub languages: Vec<String>,
pub media_type: String,
pub name: String,
pub publisher: String,
}
#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)]
pub struct SimplifiedEpisode {
pub audio_preview_url: Option<String>,
pub description: String,
#[serde(with = "duration_ms", rename = "duration_ms")]
pub duration: Duration,
pub explicit: bool,
pub external_urls: HashMap<String, String>,
pub href: String,
pub id: EpisodeId,
pub images: Vec<Image>,
pub is_externally_hosted: bool,
pub is_playable: bool,
#[deprecated(note = "This `language` field is deprecated and might be \
removed in the future by Spotify. Please use the languages field \
instead")]
pub language: String,
pub languages: Vec<String>,
pub name: String,
pub release_date: String,
pub release_date_precision: DatePrecision,
pub resume_point: Option<ResumePoint>,
}
#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)]
pub struct FullEpisode {
pub audio_preview_url: Option<String>,
pub description: String,
#[serde(with = "duration_ms", rename = "duration_ms")]
pub duration: Duration,
pub explicit: bool,
pub external_urls: HashMap<String, String>,
pub href: String,
pub id: EpisodeId,
pub images: Vec<Image>,
pub is_externally_hosted: bool,
pub is_playable: bool,
#[deprecated(note = "This `language` field is deprecated and might be \
removed in the future by Spotify. Please use the languages field \
instead")]
pub language: String,
pub languages: Vec<String>,
pub name: String,
pub release_date: String,
pub release_date_precision: DatePrecision,
pub resume_point: Option<ResumePoint>,
pub show: SimplifiedShow,
}
#[derive(Deserialize)]
pub struct EpisodesPayload {
pub episodes: Vec<FullEpisode>,
}
#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq, Default)]
pub struct ResumePoint {
pub fully_played: bool,
#[serde(with = "duration_ms", rename = "resume_position_ms")]
pub resume_position: Duration,
}