diff options
Diffstat (limited to 'common')
-rw-r--r-- | common/src/user.rs | 23 |
1 files changed, 21 insertions, 2 deletions
diff --git a/common/src/user.rs b/common/src/user.rs index 543162c..8640dc2 100644 --- a/common/src/user.rs +++ b/common/src/user.rs @@ -1,5 +1,5 @@ use serde::{Deserialize, Serialize}; -use std::collections::HashMap; +use std::{collections::HashMap, fmt::Display}; #[derive(Debug, Clone, Serialize, Deserialize)] pub struct User { @@ -13,18 +13,37 @@ pub struct User { #[derive(Debug, Clone, Serialize, Deserialize, Default)] pub struct PermissionSet(pub HashMap<UserPermission, bool>); -#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq, Hash)] +#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Hash)] #[serde(rename_all = "snake_case")] pub enum UserPermission { + Admin, OriginalStream, Transcode, ManageUsers, GenerateInvite, + AccessNode(String), } impl UserPermission { + pub const ALL_ENUMERABLE: &'static [UserPermission] = { + use UserPermission::*; + &[Admin, OriginalStream, Transcode] + }; pub fn default_value(&self) -> bool { use UserPermission::*; matches!(self, Transcode) } } + +impl Display for UserPermission { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + f.write_str(&match self { + UserPermission::Admin => format!("administrative rights"), + UserPermission::OriginalStream => format!("download of the original media"), + UserPermission::Transcode => format!("transcoding"), + UserPermission::ManageUsers => format!("management of all users"), + UserPermission::GenerateInvite => format!("inviting new users"), + UserPermission::AccessNode(s) => format!("access to library node {s:?}"), + }) + } +} |