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}