twilight_model/gateway/payload/incoming/
role_update.rs

1use crate::{
2    guild::Role,
3    id::{Id, marker::GuildMarker},
4};
5use serde::{Deserialize, Serialize};
6
7#[derive(Clone, Debug, Deserialize, Eq, Hash, PartialEq, Serialize)]
8pub struct RoleUpdate {
9    pub guild_id: Id<GuildMarker>,
10    pub role: Role,
11}
12
13#[cfg(test)]
14mod tests {
15    use super::{Role, RoleUpdate};
16    use crate::{
17        guild::{Permissions, RoleColors, RoleFlags},
18        id::Id,
19    };
20    use serde_test::Token;
21
22    #[test]
23    fn role_update() {
24        let value = RoleUpdate {
25            guild_id: Id::new(1),
26            role: Role {
27                #[allow(deprecated)]
28                color: 0,
29                colors: RoleColors {
30                    primary_color: 0,
31                    secondary_color: None,
32                    tertiary_color: None,
33                },
34                hoist: true,
35                icon: None,
36                id: Id::new(1),
37                managed: false,
38                mentionable: false,
39                name: "a role".to_owned(),
40                permissions: Permissions::SEND_MESSAGES,
41                position: 12,
42                flags: RoleFlags::empty(),
43                tags: None,
44                unicode_emoji: None,
45            },
46        };
47
48        serde_test::assert_tokens(
49            &value,
50            &[
51                Token::Struct {
52                    name: "RoleUpdate",
53                    len: 2,
54                },
55                Token::Str("guild_id"),
56                Token::NewtypeStruct { name: "Id" },
57                Token::Str("1"),
58                Token::Str("role"),
59                Token::Struct {
60                    name: "Role",
61                    len: 10,
62                },
63                Token::Str("color"),
64                Token::U32(0),
65                Token::Str("colors"),
66                Token::Struct {
67                    name: "RoleColors",
68                    len: 3,
69                },
70                Token::Str("primary_color"),
71                Token::U32(0),
72                Token::Str("secondary_color"),
73                Token::None,
74                Token::Str("tertiary_color"),
75                Token::None,
76                Token::StructEnd,
77                Token::Str("hoist"),
78                Token::Bool(true),
79                Token::Str("id"),
80                Token::NewtypeStruct { name: "Id" },
81                Token::Str("1"),
82                Token::Str("managed"),
83                Token::Bool(false),
84                Token::Str("mentionable"),
85                Token::Bool(false),
86                Token::Str("name"),
87                Token::Str("a role"),
88                Token::Str("permissions"),
89                Token::Str("2048"),
90                Token::Str("position"),
91                Token::I64(12),
92                Token::Str("flags"),
93                Token::U64(0),
94                Token::StructEnd,
95                Token::StructEnd,
96            ],
97        );
98    }
99}