use clap::{Parser, Subcommand, ValueEnum};
use std::path::PathBuf;
pub mod boot;
pub mod daemon;
#[cfg(target_os = "macos")]
pub mod dns;
pub mod docker;
pub mod machine;
pub mod sandbox;
pub mod setup;
pub mod version;
#[derive(Parser)]
#[command(name = "abctl")]
#[command(author, version, about, long_about = None)]
#[command(propagate_version = true)]
pub struct Cli {
#[command(subcommand)]
pub command: Commands,
#[arg(long, global = true)]
pub socket: Option<PathBuf>,
#[arg(long, global = true, default_value = "table")]
pub format: OutputFormat,
#[arg(long, global = true)]
pub debug: bool,
}
#[derive(Debug, Clone, Copy, Default, ValueEnum)]
pub enum OutputFormat {
#[default]
Table,
Json,
Quiet,
}
#[derive(Subcommand)]
pub enum Commands {
#[command(subcommand)]
Machine(machine::MachineCommands),
#[command(subcommand)]
Sandbox(sandbox::SandboxCommands),
#[command(subcommand)]
Docker(docker::DockerCommands),
#[command(subcommand)]
Boot(boot::BootCommands),
#[cfg(target_os = "macos")]
#[command(subcommand)]
Dns(dns::DnsCommands),
Daemon(daemon::DaemonArgs),
#[command(subcommand)]
Setup(setup::SetupCommands),
Info,
Version,
}