use std::io;
use std::process::exit;
use clap::Parser;
use clap_complete::Shell;
use clap_complete::generate;
use git_gamble::git_gamble::cli::Cli;
use git_gamble::git_gamble::cli::OptionalSubcommands;
use git_gamble::git_gamble::gamble::gamble;
use git_gamble::git_gamble::generate_shell_completions::generate_shell_completions;
fn main() {
#[cfg(feature = "with_log")]
pretty_env_logger::init();
human_panic::setup_panic!(
human_panic::metadata!()
.support("- Issue: https://gitlab.com/pinage404/git-gamble/-/issues/new")
);
let opt = Cli::parse();
log::info!("{opt:#?}");
match opt.optional_subcommands {
Some(subcommand_opt) => {
match subcommand_opt {
OptionalSubcommands::GenerateShellCompletions(generate_shell_completions_opt) => {
generate_shell_completions(env!("CARGO_BIN_NAME"), |package_name, command| {
let shell = generate_shell_completions_opt
.shell
.or_else(Shell::from_env)
.unwrap_or(Shell::Bash);
generate(shell, command, package_name, &mut io::stdout())
})
}
}
exit(0)
}
None => match gamble(opt) {
Ok(()) => exit(0),
Err(error) => {
error.display_messages();
exit(error.code)
}
},
}
}