Skip to main content

twilight_model/channel/message/embed/
video.rs

1use serde::{Deserialize, Serialize};
2
3use super::EmbedMediaFlags;
4
5#[derive(Clone, Debug, Deserialize, Eq, Hash, PartialEq, Serialize)]
6pub struct EmbedVideo {
7    #[serde(skip_serializing_if = "Option::is_none")]
8    pub height: Option<u64>,
9    #[serde(skip_serializing_if = "Option::is_none")]
10    pub proxy_url: Option<String>,
11    #[serde(skip_serializing_if = "Option::is_none")]
12    pub url: Option<String>,
13    #[serde(skip_serializing_if = "Option::is_none")]
14    pub width: Option<u64>,
15    /// Video's [media type].
16    ///
17    /// [media type]: https://en.wikipedia.org/wiki/Media_type
18    #[serde(skip_serializing_if = "Option::is_none")]
19    pub content_type: Option<String>,
20    /// A [thumbhash](https://evanw.github.io/thumbhash) placeholder of the video.
21    #[serde(skip_serializing_if = "Option::is_none")]
22    pub placeholder: Option<String>,
23    /// Version of the placeholder.
24    #[serde(skip_serializing_if = "Option::is_none")]
25    pub placeholder_version: Option<u64>,
26    /// Media flags for this video.
27    #[serde(skip_serializing_if = "Option::is_none")]
28    pub flags: Option<EmbedMediaFlags>,
29}
30
31#[cfg(test)]
32mod tests {
33    use super::EmbedMediaFlags;
34    use super::EmbedVideo;
35    use serde_test::Token;
36
37    #[test]
38    fn embed_video() {
39        let value = EmbedVideo {
40            height: Some(1440),
41            proxy_url: Some("https://proxy.cdn.example.com/1-hash.mp4".to_owned()),
42            url: Some("https://cdn.example.com/1-hash.mp4".to_owned()),
43            width: Some(2560),
44            content_type: Some("video/mp4".to_owned()),
45            // Thumbhash of the twilight project logo.
46            placeholder: Some("zSeKDQIoCLiHeIKeiLyfrsBqCIaYaHJ2Vg".to_owned()),
47            placeholder_version: Some(1),
48            flags: Some(EmbedMediaFlags::IS_ANIMATED),
49        };
50
51        serde_test::assert_tokens(
52            &value,
53            &[
54                Token::Struct {
55                    name: "EmbedVideo",
56                    len: 8,
57                },
58                Token::Str("height"),
59                Token::Some,
60                Token::U64(1440),
61                Token::Str("proxy_url"),
62                Token::Some,
63                Token::Str("https://proxy.cdn.example.com/1-hash.mp4"),
64                Token::Str("url"),
65                Token::Some,
66                Token::Str("https://cdn.example.com/1-hash.mp4"),
67                Token::Str("width"),
68                Token::Some,
69                Token::U64(2560),
70                Token::Str("content_type"),
71                Token::Some,
72                Token::Str("video/mp4"),
73                Token::Str("placeholder"),
74                Token::Some,
75                Token::Str("zSeKDQIoCLiHeIKeiLyfrsBqCIaYaHJ2Vg"),
76                Token::Str("placeholder_version"),
77                Token::Some,
78                Token::U64(1),
79                Token::Str("flags"),
80                Token::Some,
81                Token::U64(32),
82                Token::StructEnd,
83            ],
84        );
85    }
86}