mayhem_db/models/server/
permissions.rs

1use num_derive::FromPrimitive;
2use serde::{Deserialize, Serialize};
3
4#[derive(Deserialize, Serialize, Debug, Clone, FromPrimitive, PartialEq, Copy)]
5pub enum ServerPermission {
6    SendMessage,
7    ReadMessage,
8    EditMessage,
9    DeleteMessage,
10
11    LoadOldMessages,
12    AtMention,
13    AtEveryone,
14
15    JoinVoice,
16    VoiceUnmute,
17    VoiceUndeafen,
18
19    VoiceMuteOther,
20    VoiceDeafenOther,
21    TextMuteOther,
22    TextDeafenOther,
23
24    DeleteOtherMessage,
25    UseCommands,
26    UseAdminCommands,
27
28    Administrator,
29    EditServer,
30    DeleteServer,
31
32    AddChannel,
33    DeleteChannel,
34    EditChannel,
35
36    EditRole,
37    AddRole,
38    DeleteRole,
39
40    CreateInvite,
41    DeleteInvite,
42    EditInvite,
43
44    AddBot,
45    AddIntegration,
46    AddPlugin,
47
48    AddRoleMembers,
49    DeleteRoleMembers,
50    EditRoleMembers,
51
52    BulkActions,
53    EnableFeatures,
54}
55
56#[derive(Deserialize, Serialize, Debug, Clone, FromPrimitive, PartialEq, Copy)]
57pub enum PermissionAccessType {
58    GRANTED,
59    NONE,
60    DENIED,
61}
62
63pub fn deserialize_permission(string: String) -> (ServerPermission, PermissionAccessType) {
64    let mut split = string.split(':');
65
66    let permission_id = split.next().unwrap().parse::<u32>().unwrap();
67    let access = split.nth(1).unwrap().parse::<u32>().unwrap();
68
69    let permission: ServerPermission = num::FromPrimitive::from_u32(permission_id).unwrap();
70    let access_type: PermissionAccessType = num::FromPrimitive::from_u32(access).unwrap();
71
72    return (permission, access_type);
73}
74
75pub fn deserialize_permissions(
76    strings: Vec<String>,
77) -> Vec<(ServerPermission, PermissionAccessType)> {
78    let mut vec: Vec<(ServerPermission, PermissionAccessType)> = Vec::new();
79
80    for string in strings {
81        vec.push(deserialize_permission(string));
82    }
83
84    return vec;
85}