use bashrs::cli::{execute_command, Cli};
use bashrs::models::Diagnostic;
use clap::Parser;
use std::error::Error;
use std::process;
fn main() {
let cli = Cli::parse();
if let Err(error) = execute_command(cli) {
if let bashrs::models::Error::CommandFailed { message } = &error {
eprintln!("{message}");
} else {
let diagnostic = Diagnostic::from_error(&error, None);
eprintln!("{diagnostic}");
}
if std::env::var("RASH_DEBUG").is_ok() {
eprintln!("\nDebug trace:");
eprintln!(" {error}");
let mut source = error.source();
while let Some(err) = source {
eprintln!(" Caused by: {err}");
source = err.source();
}
}
let inner_error = match &error {
bashrs::models::Error::WithContext { inner, .. } => inner.as_ref(),
other => other,
};
let exit_code = match inner_error {
bashrs::models::Error::Io(_) => 2, bashrs::models::Error::Parse(_) => 2, bashrs::models::Error::Internal(_) => 2, _ => 1, };
process::exit(exit_code);
}
}