Start development sprint 3.

This commit is contained in:
Paul Makles
2021-01-18 13:41:48 +00:00
parent a9f258de6b
commit af8731ac38
8 changed files with 75 additions and 45 deletions

View File

@@ -0,0 +1,33 @@
use crate::database::*;
use num_enum::TryFromPrimitive;
use std::ops;
#[derive(Debug, PartialEq, Eq, TryFromPrimitive, Copy, Clone)]
#[repr(u32)]
pub enum ChannelPermission {
View = 1,
SendMessage = 2,
}
bitfield! {
pub struct ChannelPermissions(MSB0 [u32]);
u32;
pub get_view, _: 31;
pub get_send_message, _: 30;
}
impl_op_ex!(+ |a: &ChannelPermission, b: &ChannelPermission| -> u32 { *a as u32 | *b as u32 });
impl_op_ex_commutative!(+ |a: &u32, b: &ChannelPermission| -> u32 { *a | *b as u32 });
pub async fn calculate(user: &User, target: &Channel) -> ChannelPermissions<[u32; 1]> {
match target {
Channel::SavedMessages { user: owner, .. } => {
if &user.id == owner {
ChannelPermissions([ ChannelPermission::View + ChannelPermission::SendMessage ])
} else {
ChannelPermissions([ 0 ])
}
}
_ => unreachable!()
}
}

View File

@@ -1,3 +1,4 @@
pub mod user;
pub mod channel;
pub use user::get_relationship;