git-gamble 2.12.1

blend TDD + TCR to make sure to develop the right thing 😌, baby step by baby step πŸ‘ΆπŸ¦Ά
Documentation
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)
			}
		},
	}
}