use clap::Parser;
use lloggs::{LoggingArgs, PreArgs, WorkerGuard};
use miette::{Result, miette};
use tracing::debug;
#[derive(Debug, Clone, Parser)]
#[command(
author,
version,
after_help = "Want more detail? Try the long '--help' flag!",
after_long_help = "Didn't expect this much output? Use the short '-h' flag to get short help."
)]
pub struct Args {
#[command(flatten)]
pub logging: LoggingArgs,
#[command(subcommand)]
pub action: crate::actions::Action,
}
pub fn get_args() -> Result<(Args, WorkerGuard)> {
let log_guard = PreArgs::parse().setup().map_err(|err| miette!("{err}"))?;
debug!("parsing arguments");
let args = Args::parse();
let log_guard = match log_guard {
Some(g) => g,
None => args
.logging
.setup(|v| match v {
0 => "warn,bestool=info,bestool_psql=info,algae_cli=info",
1 => "info,bestool=debug",
2 => "debug",
3 => "debug,bestool=trace",
_ => "trace",
})
.map_err(|err| miette!("{err}"))?,
};
debug!(?args, "got arguments");
Ok((args, log_guard))
}
#[test]
fn verify_cli() {
use clap::CommandFactory;
Args::command().debug_assert()
}