twilight_model/guild/invite/
welcome_screen.rs1use 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 pub description: Option<String>,
11 pub welcome_channels: Vec<WelcomeScreenChannel>,
13}
14
15#[derive(Clone, Debug, Deserialize, Eq, Hash, PartialEq, Serialize)]
16pub struct WelcomeScreenChannel {
17 pub channel_id: Id<ChannelMarker>,
19 pub description: String,
21 pub emoji_id: Option<Id<EmojiMarker>>,
23 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}