Clap: fixed list of valid values for generic type



examples/clap/value-parser-fixed-list/src/main.rs
use clap::Parser;

#[derive(Parser, Debug)]
struct Cli {
    #[arg(long, value_parser = ["cat", "dog", "crab"])]
    animal: String,
}

fn main() {
    let args = Cli::parse();
    println!("{args:?}");
}

$ cargo run -q -- -h
Usage: value-parser-fixed-list --animal <ANIMAL>

Options:
      --animal <ANIMAL>  [possible values: cat, dog, crab]
  -h, --help             Print help



$ cargo run -q
error: the following required arguments were not provided:
  --animal <ANIMAL>

Usage: value-parser-fixed-list --animal <ANIMAL>

For more information, try '--help'.



$ cargo run -q -- --animal cat
Cli { animal: "cat" }


$ cargo run -q -- --animal snake
error: invalid value 'snake' for '--animal <ANIMAL>'
  [possible values: cat, dog, crab]

For more information, try '--help'.