use std::io::{self, Write};
use std::process::ExitCode;
use clap::Args;
use clap_complete::Shell;
#[derive(Args)]
pub struct CompletionsArgs {
#[arg(value_enum, value_name = "SHELL")]
shell: Shell,
}
pub fn run(args: CompletionsArgs, cmd: &mut clap::Command) -> ExitCode {
let bin_name = cmd.get_name().to_string();
let mut script = Vec::new();
clap_complete::generate(args.shell, cmd, bin_name, &mut script);
match io::stdout().write_all(&script) {
Ok(()) => ExitCode::SUCCESS,
Err(e) if e.kind() == io::ErrorKind::BrokenPipe => ExitCode::SUCCESS,
Err(e) => {
eprintln!("rossi completions: {e}");
ExitCode::from(1)
}
}
}