discord_webhook2/roles/
flags.rs1use serde::{Deserialize, Deserializer, Serialize, Serializer};
2
3#[derive(Debug, Clone)]
4pub struct RoleFlags {
5 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}