twilight_model/channel/message/embed/
author.rs1use serde::{Deserialize, Serialize};
2
3#[derive(Clone, Debug, Deserialize, Eq, Hash, PartialEq, Serialize)]
4pub struct EmbedAuthor {
5 #[serde(skip_serializing_if = "Option::is_none")]
6 pub icon_url: Option<String>,
7 pub name: String,
8 #[serde(skip_serializing_if = "Option::is_none")]
9 pub proxy_icon_url: Option<String>,
10 #[serde(skip_serializing_if = "Option::is_none")]
11 pub url: Option<String>,
12}
13
14#[cfg(test)]
15mod tests {
16 use super::EmbedAuthor;
17 use serde_test::Token;
18
19 #[test]
20 fn embed_author() {
21 let value = EmbedAuthor {
22 icon_url: Some("https://example.com/1.png".to_owned()),
23 name: "test".to_owned(),
24 proxy_icon_url: None,
25 url: Some("https://example.com".to_owned()),
26 };
27
28 serde_test::assert_tokens(
29 &value,
30 &[
31 Token::Struct {
32 name: "EmbedAuthor",
33 len: 3,
34 },
35 Token::Str("icon_url"),
36 Token::Some,
37 Token::Str("https://example.com/1.png"),
38 Token::Str("name"),
39 Token::Str("test"),
40 Token::Str("url"),
41 Token::Some,
42 Token::Str("https://example.com"),
43 Token::StructEnd,
44 ],
45 );
46 }
47
48 #[test]
49 fn embed_author_complete() {
50 let value = EmbedAuthor {
51 icon_url: Some("https://example.com/1.png".to_owned()),
52 name: "test".to_owned(),
53 proxy_icon_url: Some("https://example.com".to_owned()),
54 url: Some("https://example.com".to_owned()),
55 };
56
57 serde_test::assert_tokens(
58 &value,
59 &[
60 Token::Struct {
61 name: "EmbedAuthor",
62 len: 4,
63 },
64 Token::Str("icon_url"),
65 Token::Some,
66 Token::Str("https://example.com/1.png"),
67 Token::Str("name"),
68 Token::Str("test"),
69 Token::Str("proxy_icon_url"),
70 Token::Some,
71 Token::Str("https://example.com"),
72 Token::Str("url"),
73 Token::Some,
74 Token::Str("https://example.com"),
75 Token::StructEnd,
76 ],
77 );
78 }
79}