use std::process::ExitCode as ProcessExitCode;
use lihaaf::cli;
use lihaaf::{CompatArgs, Error, ExitCode, run, run_compat};
fn main() -> ProcessExitCode {
let mut argv: Vec<String> = std::env::args().collect();
if argv.len() >= 2 && argv[1] == "lihaaf" {
argv.remove(1);
}
let parsed = match cli::parse_from(argv) {
Ok(p) => p,
Err(Error::Cli { clap_exit_code, .. }) => {
return ProcessExitCode::from(clap_exit_code.clamp(0, 255) as u8);
}
Err(e) => {
eprintln!("lihaaf: {e}");
return ProcessExitCode::from(ExitCode::ConfigInvalid as u8);
}
};
if parsed.compat {
let args = match CompatArgs::from_cli(parsed) {
Ok(a) => a,
Err(Error::Cli {
clap_exit_code,
message,
}) => {
eprintln!("{message}");
return ProcessExitCode::from(clap_exit_code.clamp(0, 255) as u8);
}
Err(e) => {
eprintln!("lihaaf: {e}");
return ProcessExitCode::from(ExitCode::ConfigInvalid as u8);
}
};
return match run_compat(args) {
Ok(()) => ProcessExitCode::from(ExitCode::Ok as u8),
Err(Error::Session(outcome)) => {
eprintln!("{outcome}");
ProcessExitCode::from(outcome.exit_code() as u8)
}
Err(other) => {
eprintln!("lihaaf: {other}");
ProcessExitCode::from(ExitCode::ConfigInvalid as u8)
}
};
}
match run(parsed) {
Ok(report) => ProcessExitCode::from(report.exit_code() as u8),
Err(Error::Session(outcome)) => {
eprintln!("{outcome}");
ProcessExitCode::from(outcome.exit_code() as u8)
}
Err(other) => {
eprintln!("lihaaf: {other}");
ProcessExitCode::from(ExitCode::ConfigInvalid as u8)
}
}
}