use std::io::Write;
use std::process::ExitCode;
use clap::Parser;
use qn::cli::Cli;
use qn::errors::{exit_code_for, render};
#[tokio::main]
async fn main() -> ExitCode {
let cli = match Cli::try_parse() {
Ok(cli) => cli,
Err(e) => {
let _ = e.print();
return if e.use_stderr() {
ExitCode::from(1)
} else {
ExitCode::SUCCESS
};
}
};
let verbose = cli.verbose;
match cli.run().await {
Ok(()) => ExitCode::SUCCESS,
Err(e) => {
let _ = writeln!(std::io::stderr(), "{}", render(&e, verbose));
ExitCode::from(exit_code_for(&e) as u8)
}
}
}