use iskra::error::error::IskraError;
use iskra::cli::cli::run_cli;
use iskra::cli::cli_args::parse_iskra_cli_args;
#[tokio::main]
async fn main() {
let orig_args: Vec<_> = std::env::args_os().collect();
let cli = match parse_iskra_cli_args(orig_args) {
Ok(cli) => cli,
Err(e) => {
eprintln!("\x1b[1;31mIskra CLI parse error:\x1b[0m {e}");
let code = match &e {
IskraError::Config { .. } => 10, IskraError::Http { .. } => 20, IskraError::Timeout { .. } => 20, IskraError::Status { .. } => 30, IskraError::Io { .. } => 40, IskraError::Cache { .. } => 40, _ => 50, };
std::process::exit(code);
}
};
let verbose_flag = cli.verbose_errors;
match run_cli().await {
Ok(_) => {}
Err(e) => {
let verbose_env = std::env::var_os("ISKRA_ERROR_VERBOSE").is_some();
if verbose_flag || verbose_env {
e.print_report();
} else {
eprintln!("\x1b[1;31mIskra Error:\x1b[0m {e}");
}
let code = match &e {
IskraError::Config { .. } => 10, IskraError::Http { .. } => 20, IskraError::Timeout { .. } => 20, IskraError::Status { .. } => 30, IskraError::Io { .. } => 40, IskraError::Cache { .. } => 40, _ => 50, };
std::process::exit(code);
}
}
}