Servers: Fetch and edit members.

Permissions: Use bit representation for permissions.
This commit is contained in:
Paul
2021-06-06 14:57:55 +01:00
parent 0af4fa4be9
commit 1f1d9613e2
10 changed files with 256 additions and 23 deletions

View File

@@ -8,8 +8,15 @@ use std::ops;
#[derive(Debug, PartialEq, Eq, TryFromPrimitive, Copy, Clone)]
#[repr(u32)]
pub enum ServerPermission {
View = 1,
ManageServer = 8,
View = 0b00000000000000000000000000000001, // 1
// 2 bits of space
ManageServer = 0b00000000000000000000000000001000, // 8
// 8 bits of space
ChangeNickname = 0b00000000000000000001000000000000, // 4096
ManageNicknames = 0b00000000000000000010000000000000, // 8192
ChangeAvatar = 0b00000000000000000100000000000000, // 16392
RemoveAvatars = 0b00000000000000001000000000000000, // 32784
// 16 bits of space
}
impl_op_ex!(+ |a: &ServerPermission, b: &ServerPermission| -> u32 { *a as u32 | *b as u32 });
@@ -20,6 +27,11 @@ bitfield! {
u32;
pub get_view, _: 31;
pub get_manage_server, _: 28;
pub get_change_nickname, _: 19;
pub get_manage_nicknames, _: 18;
pub get_change_avatar, _: 17;
pub get_remove_avatars, _: 16;
}
impl<'a> PermissionCalculator<'a> {
@@ -33,7 +45,7 @@ impl<'a> PermissionCalculator<'a> {
if self.perspective.id == server.owner {
Ok(u32::MAX)
} else {
Ok(ServerPermission::View as u32)
Ok(ServerPermission::View + ServerPermission::ChangeNickname + ServerPermission::ChangeAvatar)
}
}