twilight_model/channel/
attachment_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 AttachmentFlags: u64 {
10 const IS_REMIX = 1 << 2;
12 }
13}
14
15impl<'de> Deserialize<'de> for AttachmentFlags {
16 fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
17 Ok(Self::from_bits_truncate(u64::deserialize(deserializer)?))
18 }
19}
20
21impl Serialize for AttachmentFlags {
22 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
23 where
24 S: Serializer,
25 {
26 serializer.serialize_u64(self.bits())
27 }
28}
29
30#[cfg(test)]
31mod tests {
32 use super::AttachmentFlags;
33 use serde::{Deserialize, Serialize};
34 use serde_test::Token;
35 use static_assertions::{assert_impl_all, const_assert_eq};
36 use std::{
37 fmt::{Binary, Debug, LowerHex, Octal, UpperHex},
38 hash::Hash,
39 ops::{
40 BitAnd, BitAndAssign, BitOr, BitOrAssign, BitXor, BitXorAssign, Not, Sub, SubAssign,
41 },
42 };
43
44 assert_impl_all!(
45 AttachmentFlags: Binary,
46 BitAnd,
47 BitAndAssign,
48 BitOr,
49 BitOrAssign,
50 BitXor,
51 BitXorAssign,
52 Clone,
53 Copy,
54 Debug,
55 Deserialize<'static>,
56 Eq,
57 Extend<AttachmentFlags>,
58 FromIterator<AttachmentFlags>,
59 Hash,
60 LowerHex,
61 Not,
62 Octal,
63 PartialEq,
64 Send,
65 Serialize,
66 Sub,
67 SubAssign,
68 Sync,
69 UpperHex
70 );
71
72 const_assert_eq!(AttachmentFlags::IS_REMIX.bits(), 4);
73
74 #[test]
75 fn serde() {
76 serde_test::assert_tokens(
77 &AttachmentFlags::IS_REMIX,
78 &[Token::U64(AttachmentFlags::IS_REMIX.bits())],
79 );
80
81 serde_test::assert_de_tokens(&AttachmentFlags::empty(), &[Token::U64(1 << 63)]);
83 }
84}