twilight_model/guild/
integration_application.rs

1use crate::{
2    id::{marker::ApplicationMarker, Id},
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                public_flags: None,
76                system: None,
77                verified: None,
78            }),
79            description: "Friendship is Magic".to_string(),
80            icon: None,
81            id: Id::new(123),
82            name: "Twilight".to_string(),
83        };
84
85        serde_test::assert_tokens(
86            &value,
87            &[
88                Token::Struct {
89                    name: "IntegrationApplication",
90                    len: 5,
91                },
92                Token::Str("bot"),
93                Token::Some,
94                Token::Struct {
95                    name: "User",
96                    len: 10,
97                },
98                Token::Str("accent_color"),
99                Token::None,
100                Token::Str("avatar"),
101                Token::None,
102                Token::Str("avatar_decoration"),
103                Token::None,
104                Token::Str("avatar_decoration_data"),
105                Token::None,
106                Token::Str("banner"),
107                Token::None,
108                Token::Str("bot"),
109                Token::Bool(false),
110                Token::Str("discriminator"),
111                Token::Str("0001"),
112                Token::Str("global_name"),
113                Token::Some,
114                Token::Str("test"),
115                Token::Str("id"),
116                Token::NewtypeStruct { name: "Id" },
117                Token::Str("2"),
118                Token::Str("username"),
119                Token::Str("test"),
120                Token::StructEnd,
121                Token::Str("description"),
122                Token::Str("Friendship is Magic"),
123                Token::Str("icon"),
124                Token::None,
125                Token::Str("id"),
126                Token::NewtypeStruct { name: "Id" },
127                Token::Str("123"),
128                Token::Str("name"),
129                Token::Str("Twilight"),
130                Token::StructEnd,
131            ],
132        );
133    }
134}