claw10-domain 0.2.3

Domain models and types for Claw10 OS
Documentation
use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
use uuid::Uuid;



#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum IdentityKind {
    Human,
    Agent,
    Service,
    Worker,
    Tool,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Identity {
    pub id: IdentityId,
    pub kind: IdentityKind,
    pub name: String,
    pub is_active: bool,
    pub created_at: DateTime<Utc>,
    pub updated_at: DateTime<Utc>,
}

#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct IdentityId(pub Uuid);

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Credential {
    pub id: CredentialId,
    pub identity_id: IdentityId,
    pub kind: CredentialKind,
    pub scope: String,
    pub issued_at: DateTime<Utc>,
    pub expires_at: DateTime<Utc>,
    pub revoked_at: Option<DateTime<Utc>>,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CredentialId(pub Uuid);

#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum CredentialKind {
    ApiKey,
    Token,
    Session,
    Certificate,
}