use serde::{Deserialize, Serialize};
use crate::id::{GroupId, UserId};
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(untagged)]
pub enum ItemPermissions {
Full { permissions: FullPermissions },
Simple { user_can_change: bool },
}
#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct FullPermissions {
pub view: Permission,
pub change: Permission,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct Permission {
pub users: Vec<UserId>,
pub groups: Vec<GroupId>,
}
impl Default for ItemPermissions {
fn default() -> Self {
Self::Full {
permissions: FullPermissions {
view: Permission {
users: Vec::new(),
groups: Vec::new(),
},
change: Permission {
users: Vec::new(),
groups: Vec::new(),
},
},
}
}
}