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}