mod app;
mod args;
mod exit;
mod help;
mod plan;
mod signals;
use clap::{CommandFactory, Parser};
use std::process::ExitCode;
pub(crate) fn run() -> ExitCode {
signals::reset_sigpipe();
if std::env::args_os().len() == 1 {
if let Err(e) = print_help() {
eprintln!("error: {e}");
return ExitCode::FAILURE;
}
return ExitCode::SUCCESS;
}
let cli = args::Cli::parse();
let plan = match plan::from_cli(cli) {
Ok(p) => p,
Err(e) => return exit::from_error(&e),
};
match app::run(plan) {
Ok(()) => ExitCode::SUCCESS,
Err(e) => exit::from_error(&e),
}
}
fn print_help() -> std::io::Result<()> {
args::Cli::command().print_help()?;
println!();
Ok(())
}