Flags are often simple booleans, but combining them into a mode string makes behavior easy to report.

Program

Play the program to choose whether verbose mode is enabled.

verbose
cli_flag_summary.rs
Replay: real traced execution (multi-file project)
fn main() {
    let verbose = true;
    let dry_run = true;
    let mode = format_mode(verbose, dry_run);
    println!("{mode}");
}

fn format_mode(verbose: bool, dry_run: bool) -> String {
    match (verbose, dry_run) {
        (true, true) => "verbose dry-run".to_string(),
        (false, true) => "quiet dry-run".to_string(),
        (true, false) => "verbose live".to_string(),
        (false, false) => "quiet live".to_string(),
    }
}
fn main() {
    let verbose = false;
    let dry_run = true;
    let mode = format_mode(verbose, dry_run);
    println!("{mode}");
}

fn format_mode(verbose: bool, dry_run: bool) -> String {
    match (verbose, dry_run) {
        (true, true) => "verbose dry-run".to_string(),
        (false, true) => "quiet dry-run".to_string(),
        (true, false) => "verbose live".to_string(),
        (false, false) => "quiet live".to_string(),
    }
}
  1. verbose ← true, dry_run ← true

    1fn main() {2    let verbos→ truee = true; //@verbose=true, false3    let dry_ru→ truen = true;4    let mode = format_mode(verbostruee, dry_rutruen);5    println!("{mode}");
  2. mode ← "verbose dry-run"

    3    let dry_run = true;4    let mod→ "verbose dry-run"e = format_mode(verbostruee, dry_rutruen);5    println!("{mode}");6}
    outputverbose dry-run
  1. verbose ← false, dry_run ← true

    1fn main() {2    let verbos→ falsee = false;3    let dry_ru→ truen = true;4    let mode = format_mode(verbosfalsee, dry_rutruen);5    println!("{mode}");
  2. mode ← "quiet dry-run"

    3    let dry_run = true;4    let mod→ "quiet dry-run"e = format_mode(verbosfalsee, dry_rutruen);5    println!("{mode}");6}
    outputquiet dry-run
flag `verbose` is a boolean flag represented by a normal binding.
mode `format_mode` turns flag combinations into a user-facing summary.
match tuple Matching `(verbose, dry_run)` keeps the mode table explicit.