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}