twilight_model/gateway/payload/incoming/
role_update.rs1use 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}