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();
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())
})
}