mnemo_core/model/
delegation.rs1use 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}