Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Clap: one of a fixed list of values (enumerated)

  • enum
  • ValueEnum

Using Clap we can define a parameter to accept only values from a fixed list of possible values. For this we create an enum where all variants of the enum correspond to the values we would like to accept. The enum has to derive from clap::ValueEnum and also from Clone and Copy.

We can also use the alias to allow alternate values to be mapped onto specific variants of the enum.

use clap::Parser;
use clap::ValueEnum;

#[derive(Debug, Clone, Copy, ValueEnum)]
enum Color {
    Red,

    #[value(alias = "Green", alias = "verde")]
    Green,
    Blue,
}

#[derive(Parser, Debug)]
struct Cli {
    #[arg(long)]
    color: Color,
}

fn main() {
    let args = Cli::parse();
    println!("{args:?}");
}
cargo run -q -- --color blue
cargo run -q -- --color red

cargo run -q -- --color green
cargo run -q -- --color Green
cargo run -q -- --color verde