use crate::effect::EffectVector;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
pub struct ApprovalRequest {
pub approval_id: String,
pub decision_id: String,
pub invocation_id: String,
pub session_id: String,
pub title: String,
pub summary: String,
pub effect_vector: EffectVector,
pub expires_at: i64,
pub status: ApprovalStatus,
}
#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq, Hash)]
#[non_exhaustive]
#[serde(rename_all = "PascalCase")]
pub enum ApprovalStatus {
Pending,
Approved,
Denied,
Expired,
Cancelled,
}
#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq, Hash)]
#[non_exhaustive]
#[serde(rename_all = "PascalCase")]
pub enum ApprovalScope {
Once,
ThisSession,
ForToolWithSameArgsHash,
ForPolicyTemplate,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
pub struct ApprovalResolution {
pub approval_id: String,
pub invocation_id: String,
pub status: ApprovalStatus,
pub scope: Option<ApprovalScope>,
pub resolved_by: Option<String>,
pub resolved_at: i64,
}