twilight_model/channel/message/embed/
footer.rs

1use serde::{Deserialize, Serialize};
2
3#[derive(Clone, Debug, Deserialize, Eq, Hash, PartialEq, Serialize)]
4pub struct EmbedFooter {
5    #[serde(skip_serializing_if = "Option::is_none")]
6    pub icon_url: Option<String>,
7    #[serde(skip_serializing_if = "Option::is_none")]
8    pub proxy_icon_url: Option<String>,
9    pub text: String,
10}
11
12#[cfg(test)]
13mod tests {
14    use super::EmbedFooter;
15    use serde_test::Token;
16
17    #[test]
18    fn embed_footer_with_icon() {
19        let value = EmbedFooter {
20            icon_url: Some("https://example.com/1.png".to_owned()),
21            proxy_icon_url: Some("https://cdn.example.com/1-hash.png".to_owned()),
22            text: "a footer".to_owned(),
23        };
24
25        serde_test::assert_tokens(
26            &value,
27            &[
28                Token::Struct {
29                    name: "EmbedFooter",
30                    len: 3,
31                },
32                Token::Str("icon_url"),
33                Token::Some,
34                Token::Str("https://example.com/1.png"),
35                Token::Str("proxy_icon_url"),
36                Token::Some,
37                Token::Str("https://cdn.example.com/1-hash.png"),
38                Token::Str("text"),
39                Token::Str("a footer"),
40                Token::StructEnd,
41            ],
42        );
43    }
44
45    #[test]
46    fn embed_footer_without_icon() {
47        let value = EmbedFooter {
48            icon_url: None,
49            proxy_icon_url: None,
50            text: "a footer".to_owned(),
51        };
52
53        serde_test::assert_tokens(
54            &value,
55            &[
56                Token::Struct {
57                    name: "EmbedFooter",
58                    len: 1,
59                },
60                Token::Str("text"),
61                Token::Str("a footer"),
62                Token::StructEnd,
63            ],
64        );
65    }
66}