leetcode_cli/cmd/
completions.rs1use crate::err::Error;
3use clap::{Args, Command as ClapCommand};
4use clap_complete::{Generator, Shell, generate};
5
6#[derive(Args)]
8pub struct CompletionsArgs {
9 #[arg(value_parser = clap::value_parser!(Shell))]
11 pub shell: Option<Shell>,
12}
13
14fn get_completions_string<G: Generator>(
15 generator: G,
16 cmd: &mut ClapCommand,
17) -> Result<String, Error> {
18 let mut v: Vec<u8> = Vec::new();
19 let name = cmd.get_name().to_string();
20 generate(generator, cmd, name, &mut v);
21 Ok(String::from_utf8(v)?)
22}
23
24impl CompletionsArgs {
25 pub fn run(&self, cmd: &mut ClapCommand) -> Result<(), Error> {
27 let shell = self
28 .shell
29 .or_else(Shell::from_env)
30 .ok_or(Error::MatchError)?;
31 let completions = get_completions_string(shell, cmd)?;
32 println!("{}", completions);
33 Ok(())
34 }
35}