twilight_model/guild/
integration_application.rs

1use crate::{
2    id::{Id, marker::ApplicationMarker},
3    user::User,
4    util::image_hash::ImageHash,
5};
6
7use serde::{Deserialize, Serialize};
8
9#[derive(Clone, Debug, Deserialize, Eq, Hash, PartialEq, Serialize)]
10pub struct IntegrationApplication {
11    #[serde(skip_serializing_if = "Option::is_none")]
12    pub bot: Option<User>,
13    pub description: String,
14    pub icon: Option<ImageHash>,
15    pub id: Id<ApplicationMarker>,
16    pub name: String,
17}
18
19#[cfg(test)]
20mod tests {
21    use super::{IntegrationApplication, User};
22    use crate::id::Id;
23    use serde_test::Token;
24
25    #[test]
26    fn integration_account() {
27        let value = IntegrationApplication {
28            bot: None,
29            description: "Friendship is Magic".to_string(),
30            icon: None,
31            id: Id::new(123),
32            name: "Twilight".to_string(),
33        };
34
35        serde_test::assert_tokens(
36            &value,
37            &[
38                Token::Struct {
39                    name: "IntegrationApplication",
40                    len: 4,
41                },
42                Token::Str("description"),
43                Token::Str("Friendship is Magic"),
44                Token::Str("icon"),
45                Token::None,
46                Token::Str("id"),
47                Token::NewtypeStruct { name: "Id" },
48                Token::Str("123"),
49                Token::Str("name"),
50                Token::Str("Twilight"),
51                Token::StructEnd,
52            ],
53        );
54    }
55
56    #[test]
57    fn integration_account_complete() {
58        let value = IntegrationApplication {
59            bot: Some(User {
60                accent_color: None,
61                avatar: None,
62                avatar_decoration: None,
63                avatar_decoration_data: None,
64                banner: None,
65                bot: false,
66                discriminator: 1,
67                email: None,
68                flags: None,
69                global_name: Some("test".to_owned()),
70                id: Id::new(2),
71                locale: None,
72                mfa_enabled: None,
73                name: "test".to_owned(),
74                premium_type: None,
75                primary_guild: None,
76                public_flags: None,
77                system: None,
78                verified: None,
79            }),
80            description: "Friendship is Magic".to_string(),
81            icon: None,
82            id: Id::new(123),
83            name: "Twilight".to_string(),
84        };
85
86        serde_test::assert_tokens(
87            &value,
88            &[
89                Token::Struct {
90                    name: "IntegrationApplication",
91                    len: 5,
92                },
93                Token::Str("bot"),
94                Token::Some,
95                Token::Struct {
96                    name: "User",
97                    len: 10,
98                },
99                Token::Str("accent_color"),
100                Token::None,
101                Token::Str("avatar"),
102                Token::None,
103                Token::Str("avatar_decoration"),
104                Token::None,
105                Token::Str("avatar_decoration_data"),
106                Token::None,
107                Token::Str("banner"),
108                Token::None,
109                Token::Str("bot"),
110                Token::Bool(false),
111                Token::Str("discriminator"),
112                Token::Str("0001"),
113                Token::Str("global_name"),
114                Token::Some,
115                Token::Str("test"),
116                Token::Str("id"),
117                Token::NewtypeStruct { name: "Id" },
118                Token::Str("2"),
119                Token::Str("username"),
120                Token::Str("test"),
121                Token::StructEnd,
122                Token::Str("description"),
123                Token::Str("Friendship is Magic"),
124                Token::Str("icon"),
125                Token::None,
126                Token::Str("id"),
127                Token::NewtypeStruct { name: "Id" },
128                Token::Str("123"),
129                Token::Str("name"),
130                Token::Str("Twilight"),
131                Token::StructEnd,
132            ],
133        );
134    }
135}