1use std::path::PathBuf;
2
3use clap::Parser;
4use clap::Subcommand;
5use clap::ValueEnum;
6
7use crate::consts::CMD_AUTO_DISCOVER;
8use crate::consts::CMD_CF2ANSIBLE;
9use crate::consts::CMD_CF2TERRA;
10use crate::consts::CMD_COMPLETIONS;
11use crate::consts::CMD_DOCKERNET;
12use crate::consts::CMD_NATMAP;
13
14#[derive(Parser)]
16#[command(version = env!("CARGO_PKG_VERSION"))]
17#[command(name = crate::consts::CMD, about = "Lab operations toolkit")]
18pub struct Cli {
19 #[command(subcommand)]
20 pub command: Command,
21
22 #[arg(short, long, global = true, action = clap::ArgAction::Count)]
24 pub verbose: u8,
25
26 #[arg(
28 long,
29 global = true,
30 default_value = "auto",
31 value_enum,
32 hide_possible_values = true
33 )]
34 pub color: ColorMode,
35}
36
37#[derive(Clone, Debug, Default, ValueEnum)]
39pub enum ColorMode {
40 #[default]
41 Auto,
42 Always,
43 Never,
44}
45
46#[derive(Subcommand)]
48pub enum Command {
49 #[command(name = CMD_CF2ANSIBLE)]
51 Cf2Ansible {
52 zone_file: PathBuf,
54 zone_name: Option<String>,
56 },
57 #[command(name = CMD_CF2TERRA)]
59 Cf2Terra {
60 zone_file: PathBuf,
62 zone_name: Option<String>,
64 #[arg(long, default_value = "var.cloudflare_zone_id")]
66 zone_id_var: String,
67 },
68 #[command(name = CMD_DOCKERNET)]
70 DockerNet,
71 #[command(name = CMD_NATMAP)]
73 NatMap {
74 #[command(flatten)]
75 args: lab_ops_natmap::cli::Cli,
76 },
77 #[command(name = CMD_AUTO_DISCOVER)]
80 AutoDiscover {
81 #[command(flatten)]
82 args: lab_ops_auto_discover::cli::Cli,
83 },
84 #[command(name = CMD_COMPLETIONS)]
86 Completions {
87 #[arg(value_enum, hide_possible_values = true)]
89 shell: clap_complete::Shell,
90 #[arg(long)]
92 dir: Option<PathBuf>,
93 },
94}