twilight_model/guild/invite/
welcome_screen.rs

1use crate::id::{
2    marker::{ChannelMarker, EmojiMarker},
3    Id,
4};
5use serde::{Deserialize, Serialize};
6
7#[derive(Clone, Debug, Deserialize, Eq, Hash, PartialEq, Serialize)]
8pub struct WelcomeScreen {
9    /// Guild description.
10    pub description: Option<String>,
11    /// Channels shown in the welcome screen.
12    pub welcome_channels: Vec<WelcomeScreenChannel>,
13}
14
15#[derive(Clone, Debug, Deserialize, Eq, Hash, PartialEq, Serialize)]
16pub struct WelcomeScreenChannel {
17    /// ID of the channel.
18    pub channel_id: Id<ChannelMarker>,
19    /// Description of the channel.
20    pub description: String,
21    /// ID of the emoji if the emoji is custom.
22    pub emoji_id: Option<Id<EmojiMarker>>,
23    /// Emoji's name if it is custom, or the unicode character.
24    pub emoji_name: Option<String>,
25}
26
27#[cfg(test)]
28mod tests {
29    use super::{WelcomeScreen, WelcomeScreenChannel};
30    use crate::id::Id;
31    use serde_test::Token;
32
33    #[test]
34    fn welcome_screen() {
35        let value = WelcomeScreen {
36            description: Some("welcome description".to_owned()),
37            welcome_channels: vec![
38                WelcomeScreenChannel {
39                    channel_id: Id::new(123),
40                    description: "channel description".to_owned(),
41                    emoji_id: None,
42                    emoji_name: Some("\u{1f352}".to_owned()),
43                },
44                WelcomeScreenChannel {
45                    channel_id: Id::new(456),
46                    description: "custom description".to_owned(),
47                    emoji_id: Some(Id::new(789)),
48                    emoji_name: Some("custom_name".to_owned()),
49                },
50            ],
51        };
52
53        serde_test::assert_tokens(
54            &value,
55            &[
56                Token::Struct {
57                    name: "WelcomeScreen",
58                    len: 2,
59                },
60                Token::Str("description"),
61                Token::Some,
62                Token::Str("welcome description"),
63                Token::Str("welcome_channels"),
64                Token::Seq { len: Some(2) },
65                Token::Struct {
66                    name: "WelcomeScreenChannel",
67                    len: 4,
68                },
69                Token::Str("channel_id"),
70                Token::NewtypeStruct { name: "Id" },
71                Token::Str("123"),
72                Token::Str("description"),
73                Token::Str("channel description"),
74                Token::Str("emoji_id"),
75                Token::None,
76                Token::Str("emoji_name"),
77                Token::Some,
78                Token::Str("\u{1f352}"),
79                Token::StructEnd,
80                Token::Struct {
81                    name: "WelcomeScreenChannel",
82                    len: 4,
83                },
84                Token::Str("channel_id"),
85                Token::NewtypeStruct { name: "Id" },
86                Token::Str("456"),
87                Token::Str("description"),
88                Token::Str("custom description"),
89                Token::Str("emoji_id"),
90                Token::Some,
91                Token::NewtypeStruct { name: "Id" },
92                Token::Str("789"),
93                Token::Str("emoji_name"),
94                Token::Some,
95                Token::Str("custom_name"),
96                Token::StructEnd,
97                Token::SeqEnd,
98                Token::StructEnd,
99            ],
100        );
101    }
102}