1use crate::{
2 channel::message::Sticker,
3 guild::Emoji,
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 GuildPreview {
11 pub approximate_member_count: u64,
12 pub approximate_presence_count: u64,
13 pub description: Option<String>,
14 pub discovery_splash: Option<ImageHash>,
15 pub emojis: Vec<Emoji>,
16 pub features: Vec<String>,
17 pub id: Id<GuildMarker>,
18 pub name: String,
19 pub icon: Option<ImageHash>,
20 pub splash: Option<ImageHash>,
21 pub stickers: Vec<Sticker>,
23}
24
25#[cfg(test)]
26mod tests {
27 use super::{Emoji, GuildPreview};
28 use crate::{id::Id, test::image_hash};
29 use serde_test::Token;
30
31 #[test]
32 fn guild_preview() {
33 let value = GuildPreview {
34 approximate_member_count: 1_000,
35 approximate_presence_count: 500,
36 description: Some("guild description".to_owned()),
37 discovery_splash: Some(image_hash::SPLASH),
38 emojis: vec![Emoji {
39 animated: false,
40 available: true,
41 id: Id::new(2),
42 managed: false,
43 name: "test".to_owned(),
44 require_colons: true,
45 roles: Vec::new(),
46 user: None,
47 }],
48 features: vec!["a feature".to_owned()],
49 id: Id::new(1),
50 name: "guild name".to_owned(),
51 icon: Some(image_hash::ICON),
52 splash: Some(image_hash::SPLASH),
53 stickers: Vec::new(),
54 };
55
56 serde_test::assert_tokens(
57 &value,
58 &[
59 Token::Struct {
60 name: "GuildPreview",
61 len: 11,
62 },
63 Token::Str("approximate_member_count"),
64 Token::U64(1_000),
65 Token::Str("approximate_presence_count"),
66 Token::U64(500),
67 Token::Str("description"),
68 Token::Some,
69 Token::Str("guild description"),
70 Token::Str("discovery_splash"),
71 Token::Some,
72 Token::Str(image_hash::SPLASH_INPUT),
73 Token::Str("emojis"),
74 Token::Seq { len: Some(1) },
75 Token::Struct {
76 name: "Emoji",
77 len: 6,
78 },
79 Token::Str("animated"),
80 Token::Bool(false),
81 Token::Str("available"),
82 Token::Bool(true),
83 Token::Str("id"),
84 Token::NewtypeStruct { name: "Id" },
85 Token::Str("2"),
86 Token::Str("managed"),
87 Token::Bool(false),
88 Token::Str("name"),
89 Token::Str("test"),
90 Token::Str("require_colons"),
91 Token::Bool(true),
92 Token::StructEnd,
93 Token::SeqEnd,
94 Token::Str("features"),
95 Token::Seq { len: Some(1) },
96 Token::Str("a feature"),
97 Token::SeqEnd,
98 Token::Str("id"),
99 Token::NewtypeStruct { name: "Id" },
100 Token::Str("1"),
101 Token::Str("name"),
102 Token::Str("guild name"),
103 Token::Str("icon"),
104 Token::Some,
105 Token::Str(image_hash::ICON_INPUT),
106 Token::Str("splash"),
107 Token::Some,
108 Token::Str(image_hash::SPLASH_INPUT),
109 Token::Str("stickers"),
110 Token::Seq { len: Some(0) },
111 Token::SeqEnd,
112 Token::StructEnd,
113 ],
114 );
115 }
116}