Skip to main content

mnemo_core/model/
delegation.rs

1use serde::{Deserialize, Serialize};
2use uuid::Uuid;
3
4use crate::model::acl::Permission;
5
6#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
7pub struct Delegation {
8    pub id: Uuid,
9    pub delegator_id: String,
10    pub delegate_id: String,
11    pub permission: Permission,
12    pub scope: DelegationScope,
13    pub max_depth: u32,
14    pub current_depth: u32,
15    pub parent_delegation_id: Option<Uuid>,
16    pub created_at: String,
17    pub expires_at: Option<String>,
18    pub revoked_at: Option<String>,
19}
20
21#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
22#[serde(rename_all = "snake_case")]
23pub enum DelegationScope {
24    AllMemories,
25    ByTag(Vec<String>),
26    ByMemoryId(Vec<Uuid>),
27}
28
29impl std::fmt::Display for DelegationScope {
30    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
31        match self {
32            DelegationScope::AllMemories => write!(f, "all_memories"),
33            DelegationScope::ByTag(_) => write!(f, "by_tag"),
34            DelegationScope::ByMemoryId(_) => write!(f, "by_memory_id"),
35        }
36    }
37}