twilight_model/gateway/payload/incoming/
role_update.rs1use crate::{
2 guild::Role,
3 id::{marker::GuildMarker, Id},
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, 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 color: 0,
28 hoist: true,
29 icon: None,
30 id: Id::new(1),
31 managed: false,
32 mentionable: false,
33 name: "a role".to_owned(),
34 permissions: Permissions::SEND_MESSAGES,
35 position: 12,
36 flags: RoleFlags::empty(),
37 tags: None,
38 unicode_emoji: None,
39 },
40 };
41
42 serde_test::assert_tokens(
43 &value,
44 &[
45 Token::Struct {
46 name: "RoleUpdate",
47 len: 2,
48 },
49 Token::Str("guild_id"),
50 Token::NewtypeStruct { name: "Id" },
51 Token::Str("1"),
52 Token::Str("role"),
53 Token::Struct {
54 name: "Role",
55 len: 9,
56 },
57 Token::Str("color"),
58 Token::U32(0),
59 Token::Str("hoist"),
60 Token::Bool(true),
61 Token::Str("id"),
62 Token::NewtypeStruct { name: "Id" },
63 Token::Str("1"),
64 Token::Str("managed"),
65 Token::Bool(false),
66 Token::Str("mentionable"),
67 Token::Bool(false),
68 Token::Str("name"),
69 Token::Str("a role"),
70 Token::Str("permissions"),
71 Token::Str("2048"),
72 Token::Str("position"),
73 Token::I64(12),
74 Token::Str("flags"),
75 Token::U64(0),
76 Token::StructEnd,
77 Token::StructEnd,
78 ],
79 );
80 }
81}