Skip to main content

yt_feed_xml/
video.rs

1use serde::{Deserialize, Serialize};
2
3use crate::xml_feed::XmlVideo;
4
5#[derive(Serialize, Deserialize, Debug, Clone)]
6#[serde(rename_all = "camelCase")]
7pub struct Video {
8    pub id: String,
9    pub title: String,
10    pub author: String,
11    pub description: String,
12    pub thumbnail: String,
13    pub published: chrono::DateTime<chrono::Utc>,
14    pub updated: chrono::DateTime<chrono::Utc>,
15    pub url: String,
16    pub author_url: String,
17    pub channel_id: String,
18    pub views: u64,
19}
20
21impl From<XmlVideo> for Video {
22    fn from(video: XmlVideo) -> Self {
23        Video {
24            id: video.video_id.value,
25            url: video.link.href,
26            channel_id: video.channel_id.value,
27            title: video.title.value,
28            author: video.author.name.value,
29            author_url: video.author.uri.value,
30            published: video.published.value,
31            updated: video.updated.value,
32            description: match video.group.description {
33                Some(s) => s.value,
34                None => String::new(),
35            },
36            thumbnail: video.group.thumbnail.url,
37            views: video.group.community.statistics.views,
38        }
39    }
40}