use std::io::Write;
use clap::{Args as ClapArgs, CommandFactory};
use clap_complete::Shell as CompletionShell;
use eyre::Result;
use crate::Cli;
#[derive(ClapArgs, Debug)]
pub struct Args {
#[arg(value_enum)]
shell: CompletionShell,
}
pub fn run(args: &Args) -> Result<()> {
let mut command = Cli::command();
let bin_name = command.get_name().to_owned();
let mut script = Vec::new();
clap_complete::generate(args.shell, &mut command, bin_name, &mut script);
match std::io::stdout().write_all(&script) {
Ok(()) => Ok(()),
Err(error) if error.kind() == std::io::ErrorKind::BrokenPipe => Ok(()),
Err(error) => Err(error.into()),
}
}