twilight_model/guild/invite/
guild.rs1use super::WelcomeScreen;
2use crate::{
3 guild::{GuildFeature, VerificationLevel},
4 id::{marker::GuildMarker, Id},
5 util::image_hash::ImageHash,
6};
7use serde::{Deserialize, Serialize};
8
9#[derive(Clone, Debug, Deserialize, Eq, Hash, PartialEq, Serialize)]
10pub struct InviteGuild {
11 pub banner: Option<ImageHash>,
13 pub description: Option<String>,
15 pub features: Vec<GuildFeature>,
17 pub icon: Option<ImageHash>,
19 pub id: Id<GuildMarker>,
21 pub name: String,
23 pub premium_subscription_count: Option<u64>,
25 pub splash: Option<ImageHash>,
27 pub vanity_url_code: Option<String>,
29 pub verification_level: VerificationLevel,
31 pub welcome_screen: Option<WelcomeScreen>,
33}
34
35#[cfg(test)]
36mod tests {
37 use crate::{
38 guild::{
39 invite::{InviteGuild, WelcomeScreen, WelcomeScreenChannel},
40 GuildFeature, VerificationLevel,
41 },
42 id::Id,
43 test::image_hash,
44 };
45 use serde_test::Token;
46
47 #[test]
48 #[allow(clippy::too_many_lines)]
49 fn test_invite_guild() {
50 let value = InviteGuild {
51 banner: Some(image_hash::BANNER),
52 description: Some("a description".to_owned()),
53 features: Vec::from([GuildFeature::Community]),
54 icon: Some(image_hash::ICON),
55 id: Id::new(1),
56 name: "guild name".to_owned(),
57 premium_subscription_count: Some(14),
58 splash: Some(image_hash::SPLASH),
59 vanity_url_code: Some("twilight".to_owned()),
60 verification_level: VerificationLevel::Medium,
61 welcome_screen: Some(WelcomeScreen {
62 description: Some("welcome description".to_owned()),
63 welcome_channels: vec![
64 WelcomeScreenChannel {
65 channel_id: Id::new(123),
66 description: "channel description".to_owned(),
67 emoji_id: None,
68 emoji_name: Some("\u{1f352}".to_owned()),
69 },
70 WelcomeScreenChannel {
71 channel_id: Id::new(456),
72 description: "custom description".to_owned(),
73 emoji_id: Some(Id::new(789)),
74 emoji_name: Some("custom_name".to_owned()),
75 },
76 ],
77 }),
78 };
79
80 serde_test::assert_tokens(
81 &value,
82 &[
83 Token::Struct {
84 name: "InviteGuild",
85 len: 11,
86 },
87 Token::Str("banner"),
88 Token::Some,
89 Token::Str(image_hash::BANNER_INPUT),
90 Token::Str("description"),
91 Token::Some,
92 Token::Str("a description"),
93 Token::Str("features"),
94 Token::Seq { len: Some(1) },
95 Token::Str("COMMUNITY"),
96 Token::SeqEnd,
97 Token::Str("icon"),
98 Token::Some,
99 Token::Str(image_hash::ICON_INPUT),
100 Token::Str("id"),
101 Token::NewtypeStruct { name: "Id" },
102 Token::Str("1"),
103 Token::Str("name"),
104 Token::Str("guild name"),
105 Token::Str("premium_subscription_count"),
106 Token::Some,
107 Token::U64(14),
108 Token::Str("splash"),
109 Token::Some,
110 Token::Str(image_hash::SPLASH_INPUT),
111 Token::Str("vanity_url_code"),
112 Token::Some,
113 Token::Str("twilight"),
114 Token::Str("verification_level"),
115 Token::U8(2),
116 Token::Str("welcome_screen"),
117 Token::Some,
118 Token::Struct {
119 name: "WelcomeScreen",
120 len: 2,
121 },
122 Token::Str("description"),
123 Token::Some,
124 Token::Str("welcome description"),
125 Token::Str("welcome_channels"),
126 Token::Seq { len: Some(2) },
127 Token::Struct {
128 name: "WelcomeScreenChannel",
129 len: 4,
130 },
131 Token::Str("channel_id"),
132 Token::NewtypeStruct { name: "Id" },
133 Token::Str("123"),
134 Token::Str("description"),
135 Token::Str("channel description"),
136 Token::Str("emoji_id"),
137 Token::None,
138 Token::Str("emoji_name"),
139 Token::Some,
140 Token::Str("\u{1f352}"),
141 Token::StructEnd,
142 Token::Struct {
143 name: "WelcomeScreenChannel",
144 len: 4,
145 },
146 Token::Str("channel_id"),
147 Token::NewtypeStruct { name: "Id" },
148 Token::Str("456"),
149 Token::Str("description"),
150 Token::Str("custom description"),
151 Token::Str("emoji_id"),
152 Token::Some,
153 Token::NewtypeStruct { name: "Id" },
154 Token::Str("789"),
155 Token::Str("emoji_name"),
156 Token::Some,
157 Token::Str("custom_name"),
158 Token::StructEnd,
159 Token::SeqEnd,
160 Token::StructEnd,
161 Token::StructEnd,
162 ],
163 )
164 }
165}