Command-line tools receive text arguments. A parser converts the text into typed values before the program uses them.

Program

Play the program to choose the raw limit argument, parse it, and print the typed value.

raw_limit
parse_limit_arg.rs
Replay: real traced execution (multi-file project)
fn main() {
    let raw_limit = "3";
    let args = ["egtry", "--limit", raw_limit];
    let limit = parse_limit(&args);
    println!("limit={limit}");
}

fn parse_limit(args: &[&str]) -> i32 {
    args[2].parse::<i32>().unwrap()
}
fn main() {
    let raw_limit = "5";
    let args = ["egtry", "--limit", raw_limit];
    let limit = parse_limit(&args);
    println!("limit={limit}");
}

fn parse_limit(args: &[&str]) -> i32 {
    args[2].parse::<i32>().unwrap()
}
fn main() {
    let raw_limit = "8";
    let args = ["egtry", "--limit", raw_limit];
    let limit = parse_limit(&args);
    println!("limit={limit}");
}

fn parse_limit(args: &[&str]) -> i32 {
    args[2].parse::<i32>().unwrap()
}
  1. raw_limit ← "3", args ← ["egtry", "--limit", "3"]

    1fn main() {2    let raw_limi→ "3"t = "3"; //@raw_limit="3", "5", "8"3    let arg→ ["egtry", "--limit", "3"]s = ["egtry", "--limit", raw_limi"3"t];4    let limit = parse_limit(&arg["egtry", "--limit", "3"]s);5    println!("limit={limit}");
  2. fn parse_limit(args: &[&str]) -> i32

    8fn parse_limit(args: &[&str]) -> i32 {9    args[2"3"].parse::<i32>().unwrap()10}
  3. limit ← 3

    3    let args = ["egtry", "--limit", raw_limit];4    let limi→ 3t = parse_limit(&arg["egtry", "--limit", "3"]s);5    println!("limit={limit}");6}
    outputlimit=3
  1. raw_limit ← "5", args ← ["egtry", "--limit", "5"]

    1fn main() {2    let raw_limi→ "5"t = "5";3    let arg→ ["egtry", "--limit", "5"]s = ["egtry", "--limit", raw_limi"5"t];4    let limit = parse_limit(&arg["egtry", "--limit", "5"]s);5    println!("limit={limit}");
  2. fn parse_limit(args: &[&str]) -> i32

    8fn parse_limit(args: &[&str]) -> i32 {9    args[2"5"].parse::<i32>().unwrap()10}
  3. limit ← 5

    3    let args = ["egtry", "--limit", raw_limit];4    let limi→ 5t = parse_limit(&arg["egtry", "--limit", "5"]s);5    println!("limit={limit}");6}
    outputlimit=5
  1. raw_limit ← "8", args ← ["egtry", "--limit", "8"]

    1fn main() {2    let raw_limi→ "8"t = "8";3    let arg→ ["egtry", "--limit", "8"]s = ["egtry", "--limit", raw_limi"8"t];4    let limit = parse_limit(&arg["egtry", "--limit", "8"]s);5    println!("limit={limit}");
  2. fn parse_limit(args: &[&str]) -> i32

    8fn parse_limit(args: &[&str]) -> i32 {9    args[2"8"].parse::<i32>().unwrap()10}
  3. limit ← 8

    3    let args = ["egtry", "--limit", raw_limit];4    let limi→ 8t = parse_limit(&arg["egtry", "--limit", "8"]s);5    println!("limit={limit}");6}
    outputlimit=8
text input Command-line arguments arrive as strings.
parse `parse::<i32>()` converts the selected text into a number.
helper `parse_limit` keeps argument extraction separate from the main flow.