git-gamble 2.14.1

blend TDD + TCR to make sure to develop the right thing 😌, baby step by baby step πŸ‘ΆπŸ¦Ά
Documentation
use std::io;

use clap::CommandFactory;
use clap_complete::Shell;
use clap_complete::generate;

use crate::git_gamble::cli::Cli;
use crate::git_gamble::subcommand_generate_shell_completions::cli::GenerateShellCompletions;

fn generate_shell_completions<Generator>(package_name: &str, shell_generator: Generator)
where
	Generator: Fn(&str, &mut clap::Command),
{
	let mut command = Cli::command(); // TODO kill mutant

	shell_generator(package_name, &mut command)
}

pub fn subcommand_generate_shell_completions(
	package_name: &str,
	generate_shell_completions_opt: GenerateShellCompletions,
) {
	generate_shell_completions(package_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())
	})
}