use super::{CliOptions, GlobalsNew, NotReady};
use crate::SubCommands;
use clap::{ArgAction, Args, Parser};
#[derive(Parser)]
#[command(author, version, about, long_about = None)]
pub struct Cli {
#[command(flatten)]
opts: Options,
#[command(subcommand)]
subcmd: SubCommands,
}
#[derive(Args)]
struct Options {
#[arg(short, long, action = ArgAction::Count, global = true, conflicts_with = "quiet")]
verbose: u8,
#[arg(short, long, global = true)]
quiet: bool,
#[arg(short = 'n', long, global = true, conflicts_with = "quiet")]
dry_run: bool,
}
impl Cli {
pub fn globals(&self) -> GlobalsNew {
use log::LevelFilter::*;
let dry_run = self.opts.dry_run;
let verbose = self.opts.verbose;
let quiet = self.opts.quiet;
let log_level = if verbose >= 2 {
Trace
} else if verbose == 1 || dry_run {
Debug
} else if quiet {
Warn
} else {
Info
};
let cli = CliOptions { dry_run, log_level };
GlobalsNew {
cli,
multi: NotReady,
cfg: NotReady,
}
}
pub fn subcmd(self) -> SubCommands {
self.subcmd
}
}