#![cfg_attr(docsrs, feature(doc_cfg))]
use std::process::ExitCode;
mod clean_overrides;
mod commands;
mod error;
mod io;
mod logger;
mod pipeline;
mod restore;
mod style;
use clap::Parser;
use crate::commands::Cli;
use crate::error::CliError;
fn main() -> ExitCode {
logger::install_panic_hook();
if std::env::var_os("GAZE_TEST_PANIC").is_some() {
panic!("gaze test-only panic trigger");
}
let cli = match Cli::try_parse() {
Ok(cli) => cli,
Err(err) => {
use clap::error::ErrorKind;
if matches!(
err.kind(),
ErrorKind::DisplayHelp | ErrorKind::DisplayVersion
) {
let _ = err.print();
return ExitCode::SUCCESS;
}
CliError::PolicyConfig.emit_stderr();
return ExitCode::from(CliError::PolicyConfig.exit_code());
}
};
match commands::dispatch(cli) {
Ok(()) => ExitCode::SUCCESS,
Err(err) => {
err.emit_stderr();
ExitCode::from(err.exit_code())
}
}
}