use clap::{Parser, Subcommand};
#[derive(Parser, Debug)]
#[command(name = "cz")]
#[command(author = "Reflective Labs")]
#[command(version)]
#[command(about = "Converge Zone - workspace orchestrator", long_about = None)]
#[command(propagate_version = true)]
pub struct Cli {
#[command(subcommand)]
pub command: Commands,
}
#[derive(Subcommand, Debug)]
pub enum Commands {
Doctor(DoctorArgs),
Bootstrap(BootstrapArgs),
Test(DevArgs),
Fmt(DevArgs),
Lint(DevArgs),
Ci(DevArgs),
Up(ServiceArgs),
Down(ServiceArgs),
Logs(LogsArgs),
Validate(ValidateArgs),
Digest(DigestArgs),
Ack(AckArgs),
Escalate(EscalateArgs),
Assign(AssignArgs),
}
#[derive(Parser, Debug)]
pub struct DoctorArgs {
#[arg(short, long)]
pub component: Option<String>,
#[arg(long, value_enum, default_value = "pretty")]
pub format: OutputFormat,
#[arg(short, long)]
pub verbose: bool,
}
#[derive(Parser, Debug)]
pub struct BootstrapArgs {
#[arg(long)]
pub skip_deps: bool,
#[arg(long)]
pub skip_env: bool,
#[arg(long)]
pub force: bool,
#[arg(long)]
pub mise: bool,
}
#[derive(Parser, Debug)]
pub struct DevArgs {
#[arg(short, long)]
pub component: Option<String>,
#[arg(long)]
pub keep_going: bool,
}
#[derive(Parser, Debug)]
pub struct ServiceArgs {
#[arg(short, long)]
pub profile: Option<String>,
#[arg(short, long)]
pub detach: bool,
}
#[derive(Parser, Debug)]
pub struct LogsArgs {
pub service: Option<String>,
#[arg(short, long)]
pub follow: bool,
#[arg(short = 'n', long, default_value = "100")]
pub tail: u32,
}
#[derive(Parser, Debug)]
pub struct ValidateArgs {
#[arg(default_value = ".")]
pub paths: Vec<String>,
#[arg(long)]
pub conventions_only: bool,
#[arg(long)]
pub skip_business_sense: bool,
#[arg(long)]
pub skip_compilability: bool,
#[arg(long)]
pub enforce: bool,
#[arg(long, value_enum, default_value = "pretty")]
pub format: OutputFormat,
#[arg(long, default_value = "true")]
pub persist: bool,
}
#[derive(Parser, Debug)]
pub struct DigestArgs {
#[arg(long, value_enum, default_value = "pretty")]
pub format: OutputFormat,
#[arg(long)]
pub include_resolved: bool,
}
#[derive(Parser, Debug)]
pub struct AckArgs {
pub finding_id: String,
#[arg(short, long)]
pub note: Option<String>,
}
#[derive(Parser, Debug)]
pub struct EscalateArgs {
pub finding_id: String,
#[arg(short, long)]
pub to: Option<String>,
#[arg(short, long)]
pub note: Option<String>,
}
#[derive(Parser, Debug)]
pub struct AssignArgs {
pub finding_id: String,
#[arg(short, long)]
pub owner: String,
#[arg(short, long)]
pub note: Option<String>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, clap::ValueEnum)]
pub enum OutputFormat {
Pretty,
Json,
Quiet,
}