use clap::{ArgAction, Args, Parser, Subcommand};
const DESCRIPTION: &str = env!("CARGO_PKG_DESCRIPTION");
const VERSION: &str = env!("CARGO_PKG_VERSION");
const AUTHORS: &str = env!("CARGO_PKG_AUTHORS");
#[derive(Parser)]
#[command(author = AUTHORS, version = VERSION, about, long_about = DESCRIPTION)]
pub struct Cli {
#[arg(short, long, action = ArgAction::SetTrue)]
pub debug: bool,
#[command(subcommand)]
pub command: Commands,
}
#[derive(Subcommand)]
pub enum Commands {
Completions(ShellArgs),
Upgrade(VersionArgs),
Preview(VersionArgs),
Downgrade(VersionArgs),
Show,
Init,
}
#[derive(Args)]
pub struct VersionArgs {
#[arg(long, action = ArgAction::SetTrue, group = "VERSION_TYPE")]
pub patch: bool,
#[arg(long, action = ArgAction::SetTrue, group = "VERSION_TYPE")]
pub minor: bool,
#[arg(long, action = ArgAction::SetTrue, group = "VERSION_TYPE")]
pub major: bool,
}
#[derive(Args)]
pub struct ShellArgs {
#[arg(value_enum)]
pub shell: clap_complete::Shell,
}