youtube_api/models/
mod.rs

1use serde::{Serialize, Deserialize};
2
3mod metadata;
4mod search;
5mod playlists;
6mod snippet;
7
8pub use self::metadata::*;
9pub use self::search::*;
10pub use self::playlists::*;
11pub use self::snippet::*;
12
13#[derive(Debug, Serialize, Deserialize)]
14#[serde(rename_all = "camelCase")]
15pub struct Response<T> {
16    pub kind: String,
17    pub etag: String,
18    pub next_page_token: Option<String>,
19    pub prev_page_token: Option<String>,
20    pub region_code: Option<String>,
21    pub page_info: PageInfo,
22    pub items: Vec<T>
23}
24
25#[derive(Debug, Serialize, Deserialize)]
26#[serde(rename_all = "camelCase")]
27pub struct PageInfo {
28    pub total_results: u64,
29    pub results_per_page: u64,
30}
31
32#[derive(Clone, Debug, Serialize, Deserialize)]
33#[serde(rename_all = "camelCase", tag = "kind")]
34pub enum Id {
35    #[serde(rename = "youtube#video")]
36    VideoId {
37        #[serde(rename = "videoId")]
38        video_id: String
39    },
40    #[serde(rename = "youtube#channel")]
41    ChannelId {
42        #[serde(rename = "channelId")]
43        channel_id: String
44    },
45    #[serde(rename = "youtube#playlist")]
46    PlaylistId {
47        #[serde(rename = "playlistId")]
48        playlist_id: String
49    },
50}
51
52impl Id {
53    pub fn into_inner(self) -> String {
54        match self {
55            Id::VideoId { video_id } => video_id,
56            Id::ChannelId { channel_id } => channel_id,
57            Id::PlaylistId { playlist_id } => playlist_id,
58        }
59    }
60}