use std::path::PathBuf;
use clap::{Args, Subcommand, ValueEnum};
use super::Format;
#[derive(Debug, Subcommand)]
pub enum PolicyCommand {
Lint(LintArgs),
Check(CheckArgs),
Compile(CompileArgs),
Upgrade(UpgradeArgs),
Install(InstallArgs),
TrustKey(TrustKeyArgs),
Remove(RemoveArgs),
}
#[derive(Debug, Args)]
pub struct InstallArgs {
pub pack: PathBuf,
#[arg(long, value_name = "PATH")]
pub sig: Option<PathBuf>,
#[arg(long)]
pub name: Option<String>,
}
#[derive(Debug, Args)]
pub struct TrustKeyArgs {
pub key: PathBuf,
#[arg(long)]
pub name: String,
}
#[derive(Debug, Args)]
pub struct RemoveArgs {
pub name: String,
}
#[derive(Debug, Args)]
pub struct LintArgs {
pub file: Option<PathBuf>,
}
#[derive(Debug, Args)]
pub struct CheckArgs {
pub action: String,
#[arg(long, short)]
pub policy: Option<PathBuf>,
#[arg(long, value_enum, default_value_t = ActionKind::Shell)]
pub kind: ActionKind,
#[arg(long)]
pub project: Option<PathBuf>,
#[arg(long)]
pub cwd: Option<PathBuf>,
#[arg(long, value_enum, default_value_t = Format::Text)]
pub format: Format,
}
#[derive(Debug, Args)]
pub struct CompileArgs {
#[arg(long, short)]
pub policy: Option<PathBuf>,
#[arg(long)]
pub project: Option<PathBuf>,
#[arg(long)]
pub cwd: Option<PathBuf>,
#[arg(long, value_enum, default_value_t = Format::Text)]
pub format: Format,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, ValueEnum)]
pub enum ActionKind {
Shell,
FsRead,
FsWrite,
Net,
Fetch,
Mcp,
}
#[derive(Debug, Args)]
pub struct UpgradeArgs {
#[arg(long, conflicts_with = "undo")]
pub dry_run: bool,
#[arg(long, short = 'y')]
pub yes: bool,
#[arg(long)]
pub undo: bool,
}