Rust Clap Cheatsheet
Clap with “derive” feature
I keep forgetting the syntax and the documentation is large and complicated, so here is a cheatsheet for things I use most.
Add clap
cargo add clap --features derive
Simple example
// We need it only to be able to call Args::parse()
use clap::Parser;
#[derive(Debug, Clone, clap::ValueEnum)]
enum ColorMode {
    /// Everything's black, can't see anything
    NoColor,
    /// Now the text is white
    DarkMode,
    /// Just random colors
    Rainbows,
}
#[derive(Debug, clap::Subcommand)]
enum Command {
    /// Self explanatory
    ReticulateSplines,
    /// Prints hello world
    PrintHelloWorld,
}
#[derive(Debug, Clone, clap::ValueEnum)]
enum Thing {
    This,
    That,
}
#[derive(Debug, clap::Parser)]
struct Args {
    /// This is documentation for color_mode argument
    #[arg(long, value_enum, default_value_t = ColorMode::NoColor)]
    color_mode: ColorMode,
    /// List of values
    #[arg(short, long, value_delimiter = ',')]
    things: Vec<Thing>,
    /// Unintuitively (in my opinion) this would be the last positional argument
    #[command(subcommand)]
    command: Option<Command>,
    /// This is 0 or more positional arguments
    #[arg()]
    files: Vec<String>
}
fn main() {
    // Prints the parsed arguments
    println!("{:?}", Args::parse());
}
Help output
Usage: claptest [OPTIONS] [FILES]... [COMMAND]
Commands:
  reticulate-splines
          Self explanatory
  print-hello-world
          Prints hello world
  help
          Print this message or the help of the given subcommand(s)
Arguments:
  [FILES]...
          This is 0 or more positional arguments
Options:
      --color-mode <COLOR_MODE>
          This is documentation for color_mode argument
          [default: no-color]
          Possible values:
          - no-color:  Everything's black, can't see anything
          - dark-mode: Now the text is white
          - rainbows:  Just random colors
  -t, --things <THINGS>
          List of values
          [possible values: this, that]
  -h, --help
          Print help information (use `-h` for a summary)
It doesn’t say it in help, but things would allow you to specify multiple items, for example:
> claptest --things that,this
Args { color_mode: NoColor, things: [That, This], command: None, files: [] }