twilight_model/guild/
role_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)]
10 pub struct RoleFlags: u64 {
11 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}