use std::path::PathBuf;
use clap::{Args, Subcommand};
use crate::cli::commands::{generate::GenerateArgs, record::RecordArgs};
use super::common::OutputFormat;
#[derive(Args, Clone, Debug)]
pub struct PolicyArgs {
#[command(subcommand)]
pub cmd: PolicyCommand,
}
#[derive(Subcommand, Clone, Debug)]
pub enum PolicyCommand {
Generate(GenerateArgs),
Record(RecordArgs),
Validate(PolicyValidateArgs),
Migrate(PolicyMigrateArgs),
Fmt(PolicyFmtArgs),
}
#[derive(Args, Clone, Debug)]
pub struct PolicyValidateArgs {
#[arg(short, long)]
pub input: PathBuf,
#[arg(long)]
pub deny_deprecations: bool,
#[arg(long, value_enum, default_value_t = OutputFormat::Text)]
pub format: OutputFormat,
}
impl PolicyValidateArgs {
pub(crate) fn is_json(&self) -> bool {
self.format == OutputFormat::Json
}
}
#[derive(Args, Clone, Debug)]
pub struct PolicyMigrateArgs {
#[arg(short, long)]
pub input: PathBuf,
#[arg(short, long)]
pub output: Option<PathBuf>,
#[arg(long)]
pub dry_run: bool,
#[arg(long)]
pub check: bool,
}
#[derive(Args, Clone, Debug)]
pub struct PolicyFmtArgs {
#[arg(short, long)]
pub input: PathBuf,
#[arg(short, long)]
pub output: Option<PathBuf>,
}