revolt_permissions/models/
server.rs

1#[cfg(feature = "schemas")]
2use schemars::JsonSchema;
3
4/// Representation of a single permission override
5#[derive(Debug, Clone, Eq, PartialEq, Default)]
6#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
7#[cfg_attr(feature = "schemas", derive(JsonSchema))]
8pub struct Override {
9    /// Allow bit flags
10    pub allow: u64,
11    /// Disallow bit flags
12    pub deny: u64,
13}
14
15/// Data permissions Field - contains both allow and deny
16#[derive(Debug, Clone, Eq, PartialEq)]
17#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
18#[cfg_attr(feature = "schemas", derive(JsonSchema))]
19pub struct DataPermissionsField {
20    pub permissions: Override,
21}
22
23/// Data permissions Value - contains allow
24#[derive(Debug, Clone, Copy, Eq, PartialEq)]
25#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
26#[cfg_attr(feature = "schemas", derive(JsonSchema))]
27pub struct DataPermissionsValue {
28    pub permissions: u64,
29}
30
31/// Data permissions Poly - can contain either Value or Field
32#[derive(Debug, Clone, Eq, PartialEq)]
33#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
34#[cfg_attr(feature = "schemas", derive(JsonSchema))]
35#[cfg_attr(feature = "serde", serde(untagged))]
36pub enum DataPermissionPoly {
37    Value {
38        /// Permission values to set for members in a `Group`
39        permissions: u64,
40    },
41    Field {
42        /// Allow / deny values to set for members in this `TextChannel` or `VoiceChannel`
43        permissions: Override,
44    },
45}
46
47/// Representation of a single permission override
48/// as it appears on models and in the database
49#[derive(Debug, Clone, Copy, Default, Eq, PartialEq)]
50#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
51#[cfg_attr(feature = "schemas", derive(JsonSchema))]
52pub struct OverrideField {
53    /// Allow bit flags
54    pub a: i64,
55    /// Disallow bit flags
56    pub d: i64,
57}
58
59impl Override {
60    /// Into allows
61    pub fn allows(&self) -> u64 {
62        self.allow
63    }
64
65    /// Into denies
66    pub fn denies(&self) -> u64 {
67        self.deny
68    }
69}
70
71impl From<Override> for OverrideField {
72    fn from(v: Override) -> Self {
73        Self {
74            a: v.allow as i64,
75            d: v.deny as i64,
76        }
77    }
78}
79
80impl From<OverrideField> for Override {
81    fn from(v: OverrideField) -> Self {
82        Self {
83            allow: v.a as u64,
84            deny: v.d as u64,
85        }
86    }
87}
88
89#[cfg(feature = "bson")]
90use bson::Bson;
91
92#[cfg(feature = "bson")]
93impl From<OverrideField> for Bson {
94    fn from(v: OverrideField) -> Self {
95        Self::Document(bson::to_document(&v).unwrap())
96    }
97}