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),
}
#[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,
}