Skip to main content

twilight_model/channel/message/embed/
flags.rs

1use bitflags::bitflags;
2use serde::{
3    de::{Deserialize, Deserializer},
4    ser::{Serialize, Serializer},
5};
6
7bitflags! {
8    /// Flags of an [`Embed`][super::Embed].
9    #[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)]
10    pub struct EmbedFlags: u64 {
11        /// This embed is a fallback for a reply to an activity card.
12        const IS_CONTENT_INVENTORY_ENTRY = 1 << 5;
13    }
14}
15
16impl<'de> Deserialize<'de> for EmbedFlags {
17    fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
18        Ok(Self::from_bits_retain(u64::deserialize(deserializer)?))
19    }
20}
21
22impl Serialize for EmbedFlags {
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::EmbedFlags;
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        EmbedFlags: 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<EmbedFlags>,
59        FromIterator<EmbedFlags>,
60        Hash,
61        LowerHex,
62        Not,
63        Octal,
64        PartialEq,
65        Send,
66        Serialize,
67        Sub,
68        SubAssign,
69        Sync,
70        UpperHex
71    );
72    const_assert_eq!(EmbedFlags::IS_CONTENT_INVENTORY_ENTRY.bits(), 1 << 5);
73
74    #[test]
75    fn serde() {
76        serde_test::assert_tokens(
77            &EmbedFlags::IS_CONTENT_INVENTORY_ENTRY,
78            &[Token::U64(EmbedFlags::IS_CONTENT_INVENTORY_ENTRY.bits())],
79        );
80    }
81}