use std::path::PathBuf;
use clap::Parser;
use clap::Subcommand;
use clap::ValueEnum;
use crate::consts::CMD_AUTO_DISCOVER;
use crate::consts::CMD_CF2ANSIBLE;
use crate::consts::CMD_CF2TERRA;
use crate::consts::CMD_COMPLETIONS;
use crate::consts::CMD_DOCKERNET;
use crate::consts::CMD_NATMAP;
#[derive(Parser)]
#[command(version = env!("CARGO_PKG_VERSION"))]
#[command(name = crate::consts::CMD, about = "Lab operations toolkit")]
pub struct Cli {
#[command(subcommand)]
pub command: Command,
#[arg(short, long, global = true, action = clap::ArgAction::Count)]
pub verbose: u8,
#[arg(
long,
global = true,
default_value = "auto",
value_enum,
hide_possible_values = true
)]
pub color: ColorMode,
}
#[derive(Clone, Debug, Default, ValueEnum)]
pub enum ColorMode {
#[default]
Auto,
Always,
Never,
}
#[derive(Subcommand)]
pub enum Command {
#[command(name = CMD_CF2ANSIBLE)]
Cf2Ansible {
zone_file: PathBuf,
zone_name: Option<String>,
},
#[command(name = CMD_CF2TERRA)]
Cf2Terra {
zone_file: PathBuf,
zone_name: Option<String>,
#[arg(long, default_value = "var.cloudflare_zone_id")]
zone_id_var: String,
},
#[command(name = CMD_DOCKERNET)]
DockerNet,
#[command(name = CMD_NATMAP)]
NatMap {
#[command(flatten)]
args: lab_ops_natmap::cli::Cli,
},
#[command(name = CMD_AUTO_DISCOVER)]
AutoDiscover {
#[command(flatten)]
args: lab_ops_auto_discover::cli::Cli,
},
#[command(name = CMD_COMPLETIONS)]
Completions {
#[arg(value_enum, hide_possible_values = true)]
shell: clap_complete::Shell,
#[arg(long)]
dir: Option<PathBuf>,
},
}