twilight_model/guild/
preview.rs

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    /// Guild's custom stickers.
22    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}