clap_utils/utils/
completion.rs

1use std::io;
2
3use clap::Command;
4use clap_complete::{generate, shells, Generator};
5use strum::EnumString;
6
7#[derive(EnumString, Debug, Clone, Copy)]
8#[strum(ascii_case_insensitive)]
9pub enum ShellType {
10    Bash,
11    Fish,
12    Zsh,
13    PowerShell,
14    Elvish,
15}
16
17impl ShellType {
18    pub fn generate_completion(&self, name: &str, cmd: &mut Command) {
19        match self {
20            ShellType::Bash => gen(shells::Bash, name, cmd),
21            ShellType::Fish => gen(shells::Fish, name, cmd),
22            ShellType::Zsh => gen(shells::Zsh, name, cmd),
23            ShellType::PowerShell => gen(shells::PowerShell, name, cmd),
24            ShellType::Elvish => gen(shells::Elvish, name, cmd),
25        }
26    }
27}
28
29fn gen<G: Generator>(shell: G, name: &str, cmd: &mut Command) {
30    generate(shell, cmd, name, &mut io::stdout());
31}