use anyhow::Result;
use clap::{CommandFactory, Parser};
use gring::cmd::Command;
use tracing_subscriber::filter::EnvFilter;
#[derive(Parser)]
pub struct Opt {
#[arg(global = true, short, long, action = clap::ArgAction::Count)]
pub verbose: u8,
#[command(subcommand)]
pub command: Command,
}
impl Opt {
pub fn start() -> Result<()> {
let app = Self::parse();
let name = Self::command().get_name().to_string();
let env = EnvFilter::try_from_default_env().unwrap_or(EnvFilter::new(match app.verbose {
0 => format!("{name}=info"),
1 => format!("{name}=debug"),
2 => "debug".into(),
_ => "trace".into(),
}));
tracing_subscriber::fmt().with_env_filter(env).init();
app.command.run()
}
}
fn main() -> anyhow::Result<()> {
Opt::start()
}