use async_trait::async_trait;
use serde_json::Value;
use crate::hooks::ToolCallContext;
#[derive(Debug, Clone)]
pub enum ApprovalDecision {
Allow,
Deny {
reason: String,
},
Modify {
arguments: Value,
note: String,
},
}
#[async_trait]
pub trait ApprovalHandler: Send + Sync {
async fn approve(&self, ctx: &ToolCallContext) -> ApprovalDecision;
}
#[derive(Debug, Default)]
pub struct AllowAll;
#[async_trait]
impl ApprovalHandler for AllowAll {
async fn approve(&self, _ctx: &ToolCallContext) -> ApprovalDecision {
ApprovalDecision::Allow
}
}