twilight_model/channel/message/embed/
footer.rs1use 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}