discord_webhook2/roles/
flags.rs

1use serde::{Deserialize, Deserializer, Serialize, Serializer};
2
3#[derive(Debug, Clone)]
4pub struct RoleFlags {
5    /// Members can select role in an onboarding prompt
6    in_prompt: bool,
7}
8
9macro_rules! set_bit {
10    ($v:expr, $bit:expr) => {
11        $v |= 1 << $bit;
12    };
13}
14
15impl Serialize for RoleFlags {
16    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
17    where
18        S: Serializer,
19    {
20        let mut bitfield = 0;
21
22        if self.in_prompt {
23            set_bit!(bitfield, 0);
24        };
25
26        serializer.serialize_u8(bitfield)
27    }
28}
29
30macro_rules! get_bit {
31    ($v:expr, $bit:expr) => {
32        ($v >> $bit) & 1 != 0
33    };
34}
35
36impl<'de> Deserialize<'de> for RoleFlags {
37    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
38    where
39        D: Deserializer<'de>,
40    {
41        let bitfield = u8::deserialize(deserializer)?;
42
43        Ok(Self {
44            in_prompt: get_bit!(bitfield, 0),
45        })
46    }
47}