use crate::capability::AccessMode;
use serde::{Deserialize, Serialize};
use std::path::PathBuf;
use std::time::SystemTime;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CapabilityRequest {
pub request_id: String,
pub path: PathBuf,
pub access: AccessMode,
pub reason: Option<String>,
pub child_pid: u32,
pub session_id: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum ApprovalDecision {
Granted,
Denied {
reason: String,
},
Timeout,
}
impl ApprovalDecision {
#[must_use]
pub fn is_granted(&self) -> bool {
matches!(self, ApprovalDecision::Granted)
}
#[must_use]
pub fn is_denied(&self) -> bool {
matches!(self, ApprovalDecision::Denied { .. })
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AuditEntry {
pub timestamp: SystemTime,
pub request: CapabilityRequest,
pub decision: ApprovalDecision,
pub backend: String,
pub duration_ms: u64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum SupervisorMessage {
Request(CapabilityRequest),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum SupervisorResponse {
Decision {
request_id: String,
decision: ApprovalDecision,
},
}