twilight_model/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 ChannelFlags: u64 {
10 const PINNED = 1 << 1;
12 const REQUIRE_TAG = 1 << 4;
14 const HIDE_MEDIA_DOWNLOAD_OPTIONS = 1 << 15;
16 const CHANNEL_OBFUSCATED = 1 << 17;
22 const IS_SPOILER_CHANNEL = 1 << 21;
30 }
31}
32
33impl<'de> Deserialize<'de> for ChannelFlags {
34 fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
35 Ok(Self::from_bits_truncate(u64::deserialize(deserializer)?))
36 }
37}
38
39impl Serialize for ChannelFlags {
40 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
41 where
42 S: Serializer,
43 {
44 serializer.serialize_u64(self.bits())
45 }
46}
47
48#[cfg(test)]
49mod tests {
50 use super::ChannelFlags;
51 use serde::{Deserialize, Serialize};
52 use serde_test::Token;
53 use static_assertions::{assert_impl_all, const_assert_eq};
54 use std::{
55 fmt::{Binary, Debug, LowerHex, Octal, UpperHex},
56 hash::Hash,
57 ops::{
58 BitAnd, BitAndAssign, BitOr, BitOrAssign, BitXor, BitXorAssign, Not, Sub, SubAssign,
59 },
60 };
61
62 assert_impl_all!(
63 ChannelFlags: Binary,
64 BitAnd,
65 BitAndAssign,
66 BitOr,
67 BitOrAssign,
68 BitXor,
69 BitXorAssign,
70 Clone,
71 Copy,
72 Debug,
73 Deserialize<'static>,
74 Eq,
75 Extend<ChannelFlags>,
76 FromIterator<ChannelFlags>,
77 Hash,
78 LowerHex,
79 Not,
80 Octal,
81 PartialEq,
82 Send,
83 Serialize,
84 Sub,
85 SubAssign,
86 Sync,
87 UpperHex
88 );
89 const_assert_eq!(ChannelFlags::PINNED.bits(), 1 << 1);
90 const_assert_eq!(ChannelFlags::REQUIRE_TAG.bits(), 1 << 4);
91 const_assert_eq!(ChannelFlags::HIDE_MEDIA_DOWNLOAD_OPTIONS.bits(), 1 << 15);
92 const_assert_eq!(ChannelFlags::CHANNEL_OBFUSCATED.bits(), 1 << 17);
93 const_assert_eq!(ChannelFlags::IS_SPOILER_CHANNEL.bits(), 1 << 21);
94
95 #[test]
96 fn serde() {
97 serde_test::assert_tokens(
98 &ChannelFlags::PINNED,
99 &[Token::U64(ChannelFlags::PINNED.bits())],
100 );
101 serde_test::assert_de_tokens(&ChannelFlags::empty(), &[Token::U64(1 << 63)]);
103 }
104}