clap_utils/utils/
completion.rs1use 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}