use clap::{Parser, Subcommand, ValueEnum};
#[derive(Parser, Debug)]
#[command(name = "agt", version, about, long_about = None)]
pub struct Cli {
#[command(subcommand)]
pub command: Commands,
}
#[derive(Subcommand, Debug)]
pub enum Commands {
Check {
#[arg(long)]
policy: String,
#[arg(long)]
input: String,
},
Policy {
#[command(subcommand)]
command: PolicyCommand,
},
Audit {
#[command(subcommand)]
command: AuditCommand,
},
Trust {
#[command(subcommand)]
command: TrustCommand,
},
}
#[derive(Subcommand, Debug)]
pub enum TrustCommand {
Show {
agent_id: String,
#[arg(long)]
store: String,
#[arg(long, value_enum, default_value_t = Format::Text)]
format: Format,
},
Set {
agent_id: String,
score: u32,
#[arg(long)]
store: String,
},
}
#[derive(Subcommand, Debug)]
pub enum AuditCommand {
Tail {
path: String,
#[arg(long, default_value_t = 20)]
limit: usize,
},
Export {
path: String,
#[arg(long, value_enum, default_value_t = AuditFormat::Json)]
format: AuditFormat,
},
}
#[derive(Copy, Clone, Debug, ValueEnum)]
pub enum AuditFormat {
Json,
Ndjson,
}
#[derive(Subcommand, Debug)]
pub enum PolicyCommand {
Validate {
path: String,
},
Explain {
path: String,
#[arg(long)]
action: String,
#[arg(long)]
context: Option<String>,
#[arg(long, value_enum, default_value_t = Format::Text)]
format: Format,
},
}
#[derive(Copy, Clone, Debug, ValueEnum)]
pub enum Format {
Text,
Json,
}