twilight_model/guild/
system_channel_flags.rs1use bitflags::bitflags;
2use serde::{
3 de::{Deserialize, Deserializer},
4 ser::{Serialize, Serializer},
5};
6
7bitflags! {
8 #[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)]
9 pub struct SystemChannelFlags: u64 {
10 const SUPPRESS_JOIN_NOTIFICATIONS = 1;
12 const SUPPRESS_PREMIUM_SUBSCRIPTIONS = 1 << 1;
14 const SUPPRESS_GUILD_REMINDER_NOTIFICATIONS = 1 << 2;
16 const SUPPRESS_JOIN_NOTIFICATION_REPLIES = 1 << 3;
18 const SUPPRESS_ROLE_SUBSCRIPTION_PURCHASE_NOTIFICATIONS = 1 << 4;
20 const SUPPRESS_ROLE_SUBSCRIPTION_PURCHASE_NOTIFICATION_REPLIES = 1 << 5;
22 }
23}
24
25impl<'de> Deserialize<'de> for SystemChannelFlags {
26 fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
27 Ok(Self::from_bits_truncate(u64::deserialize(deserializer)?))
28 }
29}
30
31impl Serialize for SystemChannelFlags {
32 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
33 where
34 S: Serializer,
35 {
36 serializer.serialize_u64(self.bits())
37 }
38}
39
40#[cfg(test)]
41mod tests {
42 use super::SystemChannelFlags;
43 use serde::{Deserialize, Serialize};
44 use serde_test::Token;
45 use static_assertions::{assert_impl_all, const_assert_eq};
46 use std::{
47 fmt::{Binary, Debug, LowerHex, Octal, UpperHex},
48 hash::Hash,
49 ops::{
50 BitAnd, BitAndAssign, BitOr, BitOrAssign, BitXor, BitXorAssign, Not, Sub, SubAssign,
51 },
52 };
53
54 assert_impl_all!(
55 SystemChannelFlags: Binary,
56 BitAnd,
57 BitAndAssign,
58 BitOr,
59 BitOrAssign,
60 BitXor,
61 BitXorAssign,
62 Clone,
63 Copy,
64 Debug,
65 Deserialize<'static>,
66 Eq,
67 Extend<SystemChannelFlags>,
68 FromIterator<SystemChannelFlags>,
69 Hash,
70 LowerHex,
71 Not,
72 Octal,
73 PartialEq,
74 Send,
75 Serialize,
76 Sub,
77 SubAssign,
78 Sync,
79 UpperHex
80 );
81 const_assert_eq!(SystemChannelFlags::SUPPRESS_JOIN_NOTIFICATIONS.bits(), 1);
82 const_assert_eq!(
83 SystemChannelFlags::SUPPRESS_PREMIUM_SUBSCRIPTIONS.bits(),
84 1 << 1
85 );
86 const_assert_eq!(
87 SystemChannelFlags::SUPPRESS_GUILD_REMINDER_NOTIFICATIONS.bits(),
88 1 << 2
89 );
90 const_assert_eq!(
91 SystemChannelFlags::SUPPRESS_JOIN_NOTIFICATION_REPLIES.bits(),
92 1 << 3
93 );
94 const_assert_eq!(
95 SystemChannelFlags::SUPPRESS_ROLE_SUBSCRIPTION_PURCHASE_NOTIFICATIONS.bits(),
96 1 << 4
97 );
98 const_assert_eq!(
99 SystemChannelFlags::SUPPRESS_ROLE_SUBSCRIPTION_PURCHASE_NOTIFICATION_REPLIES.bits(),
100 1 << 5
101 );
102
103 #[test]
104 fn serde() {
105 serde_test::assert_tokens(
106 &SystemChannelFlags::SUPPRESS_JOIN_NOTIFICATION_REPLIES,
107 &[Token::U64(
108 SystemChannelFlags::SUPPRESS_JOIN_NOTIFICATION_REPLIES.bits(),
109 )],
110 );
111 serde_test::assert_de_tokens(&SystemChannelFlags::empty(), &[Token::U64(1 << 63)]);
113 }
114}