#[cfg(feature = "musl-allocator")]
#[global_allocator]
static GLOBAL: mimalloc::MiMalloc = mimalloc::MiMalloc;
fn main() {
let runtime = match tokio::runtime::Builder::new_multi_thread()
.enable_all()
.build()
{
Ok(rt) => rt,
Err(e) => {
eprintln!("erro ao criar runtime: {e}");
std::process::exit(ssh_cli::erros::exit_codes::EX_IOERR);
}
};
let resultado = runtime.block_on(ssh_cli::run());
match resultado {
Ok(()) => {
if ssh_cli::signals::terminado() {
std::process::exit(ssh_cli::erros::exit_codes::EX_SIGTERM);
}
if ssh_cli::signals::cancelado() {
std::process::exit(ssh_cli::erros::exit_codes::EX_SIGINT);
}
std::process::exit(ssh_cli::erros::exit_codes::EX_OK);
}
Err(e) => {
if ssh_cli::signals::terminado() {
std::process::exit(ssh_cli::erros::exit_codes::EX_SIGTERM);
}
if ssh_cli::signals::cancelado() {
std::process::exit(ssh_cli::erros::exit_codes::EX_SIGINT);
}
let quer_json = ssh_cli::output::quer_json_erros();
if let Some(erro_ssh) = e.downcast_ref::<ssh_cli::erros::ErroSshCli>() {
let code = erro_ssh.exit_code();
let remote = match erro_ssh {
ssh_cli::erros::ErroSshCli::ComandoFalhou { exit_code, .. } => Some(*exit_code),
_ => None,
};
if quer_json {
let _ = ssh_cli::output::imprimir_erro_envelope(
code,
&erro_ssh.to_string(),
remote,
);
} else {
eprintln!("{erro_ssh}");
}
std::process::exit(code);
}
let code = ssh_cli::erros::exit_codes::EX_GENERAL;
if quer_json {
let _ = ssh_cli::output::imprimir_erro_envelope(code, &e.to_string(), None);
} else {
eprintln!("{e}");
}
std::process::exit(code);
}
}
}