twilight_model/gateway/payload/incoming/
guild_delete.rs

1use crate::id::{marker::GuildMarker, Id};
2use serde::{Deserialize, Serialize};
3
4#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
5pub struct GuildDelete {
6    pub id: Id<GuildMarker>,
7    /// If `None` the user was removed from the guild.
8    pub unavailable: Option<bool>,
9}
10
11#[cfg(test)]
12mod tests {
13    use super::super::GuildDelete;
14    use crate::id::Id;
15    use serde_test::Token;
16
17    #[test]
18    fn guild_delete_available() {
19        let expected = GuildDelete {
20            id: Id::new(123),
21            unavailable: Some(true),
22        };
23
24        serde_test::assert_de_tokens(
25            &expected,
26            &[
27                Token::Struct {
28                    name: "GuildDelete",
29                    len: 2,
30                },
31                Token::Str("id"),
32                Token::NewtypeStruct { name: "Id" },
33                Token::Str("123"),
34                Token::Str("unavailable"),
35                Token::Some,
36                Token::Bool(true),
37                Token::StructEnd,
38            ],
39        );
40        serde_test::assert_ser_tokens(
41            &expected,
42            &[
43                Token::Struct {
44                    name: "GuildDelete",
45                    len: 2,
46                },
47                Token::Str("id"),
48                Token::NewtypeStruct { name: "Id" },
49                Token::Str("123"),
50                Token::Str("unavailable"),
51                Token::Some,
52                Token::Bool(true),
53                Token::StructEnd,
54            ],
55        );
56    }
57
58    #[test]
59    fn guild_delete_unavailable() {
60        let expected = GuildDelete {
61            id: Id::new(123),
62            unavailable: Some(false),
63        };
64
65        serde_test::assert_de_tokens(
66            &expected,
67            &[
68                Token::Struct {
69                    name: "GuildDelete",
70                    len: 2,
71                },
72                Token::Str("id"),
73                Token::NewtypeStruct { name: "Id" },
74                Token::Str("123"),
75                Token::Str("unavailable"),
76                Token::Some,
77                Token::Bool(false),
78                Token::StructEnd,
79            ],
80        );
81        serde_test::assert_ser_tokens(
82            &expected,
83            &[
84                Token::Struct {
85                    name: "GuildDelete",
86                    len: 2,
87                },
88                Token::Str("id"),
89                Token::NewtypeStruct { name: "Id" },
90                Token::Str("123"),
91                Token::Str("unavailable"),
92                Token::Some,
93                Token::Bool(false),
94                Token::StructEnd,
95            ],
96        );
97    }
98
99    #[test]
100    fn guild_delete_unavailable_null_default() {
101        let expected = GuildDelete {
102            id: Id::new(123),
103            unavailable: None,
104        };
105
106        serde_test::assert_de_tokens(
107            &expected,
108            &[
109                Token::Struct {
110                    name: "GuildDelete",
111                    len: 1,
112                },
113                Token::Str("id"),
114                Token::NewtypeStruct { name: "Id" },
115                Token::Str("123"),
116                Token::StructEnd,
117            ],
118        );
119    }
120}