use anyhow::Result;
use clap::{Parser, Subcommand};
use crate::commands::executable::ExecutableCommand;
use crate::config::CliConfig;
pub const EXIT_APPROVAL_REQUIRED: i32 = 75;
#[derive(Parser, Debug)]
#[command(about = "Manage approval gates")]
pub struct ApprovalCommand {
#[command(subcommand)]
pub command: ApprovalSubcommand,
}
#[derive(Subcommand, Debug)]
pub enum ApprovalSubcommand {
List(ApprovalListCommand),
Grant(ApprovalGrantCommand),
}
#[derive(Parser, Debug)]
pub struct ApprovalListCommand {}
#[derive(Parser, Debug)]
pub struct ApprovalGrantCommand {
#[arg(long)]
pub request: String,
#[arg(long)]
pub note: Option<String>,
}
impl ExecutableCommand for ApprovalCommand {
fn execute(&self, _ctx: &CliConfig) -> Result<()> {
match &self.command {
ApprovalSubcommand::List(_cmd) => {
println!("No pending approval requests.");
Ok(())
}
ApprovalSubcommand::Grant(cmd) => {
println!(
"Approval grant for request {} — not yet wired to storage backend.",
cmd.request
);
Ok(())
}
}
}
}