kirino 0.3.0

A customizable, zero-trust authentication framework.
Documentation
use serde::{Deserialize, Serialize};

#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum DelegatorType {
    Human,
    Agent,
    SubAgent,
    ExternalSystem,
    Scheduler,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Delegator {
    pub id: String,
    pub delegator_type: DelegatorType,
    pub session_badge: String,
    pub parent_id: Option<String>,
}

impl Delegator {
    pub fn human(id: impl Into<String>, session_badge: impl Into<String>) -> Self {
        Self {
            id: id.into(),
            delegator_type: DelegatorType::Human,
            session_badge: session_badge.into(),
            parent_id: None,
        }
    }

    pub fn agent(id: impl Into<String>, session_badge: impl Into<String>) -> Self {
        Self {
            id: id.into(),
            delegator_type: DelegatorType::Agent,
            session_badge: session_badge.into(),
            parent_id: None,
        }
    }

    pub fn sub_agent(
        id: impl Into<String>,
        session_badge: impl Into<String>,
        parent_id: impl Into<String>,
    ) -> Self {
        Self {
            id: id.into(),
            delegator_type: DelegatorType::SubAgent,
            session_badge: session_badge.into(),
            parent_id: Some(parent_id.into()),
        }
    }

    pub fn with_parent(mut self, parent_id: impl Into<String>) -> Self {
        self.parent_id = Some(parent_id.into());
        self
    }
}