twilight_model/guild/
role_flags.rs

1use bitflags::bitflags;
2use serde::{
3    de::{Deserialize, Deserializer},
4    ser::{Serialize, Serializer},
5};
6
7bitflags! {
8    /// The flags for a role represented as a bitfield.
9    #[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)]
10    pub struct RoleFlags: u64 {
11        /// A role that is available to select as an option within the guild onboarding flow.
12        const IN_PROMPT = 1 << 0;
13    }
14}
15
16impl<'de> Deserialize<'de> for RoleFlags {
17    fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
18        Ok(Self::from_bits_truncate(u64::deserialize(deserializer)?))
19    }
20}
21
22impl Serialize for RoleFlags {
23    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
24    where
25        S: Serializer,
26    {
27        serializer.serialize_u64(self.bits())
28    }
29}
30
31#[cfg(test)]
32mod tests {
33    use super::RoleFlags;
34    use serde::{Deserialize, Serialize};
35    use serde_test::Token;
36    use static_assertions::{assert_impl_all, const_assert_eq};
37    use std::{
38        fmt::{Binary, Debug, LowerHex, Octal, UpperHex},
39        hash::Hash,
40        ops::{
41            BitAnd, BitAndAssign, BitOr, BitOrAssign, BitXor, BitXorAssign, Not, Sub, SubAssign,
42        },
43    };
44
45    assert_impl_all!(
46        RoleFlags: Binary,
47        BitAnd,
48        BitAndAssign,
49        BitOr,
50        BitOrAssign,
51        BitXor,
52        BitXorAssign,
53        Clone,
54        Copy,
55        Debug,
56        Deserialize<'static>,
57        Eq,
58        Extend<RoleFlags>,
59        FromIterator<RoleFlags>,
60        Hash,
61        LowerHex,
62        Not,
63        Octal,
64        PartialEq,
65        Send,
66        Serialize,
67        Sub,
68        SubAssign,
69        UpperHex,
70    );
71
72    const_assert_eq!(1 << 0, RoleFlags::IN_PROMPT.bits());
73
74    #[test]
75    fn deserialize() {
76        serde_test::assert_tokens(
77            &RoleFlags::IN_PROMPT,
78            &[Token::U64(RoleFlags::IN_PROMPT.bits())],
79        );
80    }
81
82    #[test]
83    fn serialize() {
84        serde_test::assert_tokens(
85            &RoleFlags::IN_PROMPT,
86            &[Token::U64(RoleFlags::IN_PROMPT.bits())],
87        );
88    }
89}