CLI Capstone
CLI Limit Parser
Read an Option Pair
CLI tools often parse option/value pairs from an argument list before choosing defaults.
Program
Play the program to choose a raw limit argument and parse it from a fixed argument list.
cli_limit_parser.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).unwrap_or(1);
println!("limit={limit}");
}
fn parse_limit(args: &[&str]) -> Option<u32> {
args.windows(2)
.find(|pair| pair[0] == "--limit")
.and_then(|pair| pair[1].parse::<u32>().ok())
}
fn main() {
let raw_limit = "2";
let args = ["egtry", "--limit", raw_limit];
let limit = parse_limit(&args).unwrap_or(1);
println!("limit={limit}");
}
fn parse_limit(args: &[&str]) -> Option<u32> {
args.windows(2)
.find(|pair| pair[0] == "--limit")
.and_then(|pair| pair[1].parse::<u32>().ok())
}
fn main() {
let raw_limit = "bad";
let args = ["egtry", "--limit", raw_limit];
let limit = parse_limit(&args).unwrap_or(1);
println!("limit={limit}");
}
fn parse_limit(args: &[&str]) -> Option<u32> {
args.windows(2)
.find(|pair| pair[0] == "--limit")
.and_then(|pair| pair[1].parse::<u32>().ok())
}
raw_limit ← "3", args ← ["egtry", "--limit", "3"]
1fn main() {2 let raw_limi→ "3"t = "3"; //@raw_limit="3", "2", "bad"3 let arg→ ["egtry", "--limit", "3"]s = ["egtry", "--limit", raw_limi"3"t];4 let limit = parse_limit(&arg["egtry", "--limit", "3"]s).unwrap_or(1);5 println!("limit={limit}");limit ← 3
3 let args = ["egtry", "--limit", raw_limit];4 let limi→ 3t = parse_limit(&arg["egtry", "--limit", "3"]s).unwrap_or(1);5 println!("limit={limit}");6}outputlimit=3
raw_limit ← "2", args ← ["egtry", "--limit", "2"]
1fn main() {2 let raw_limi→ "2"t = "2";3 let arg→ ["egtry", "--limit", "2"]s = ["egtry", "--limit", raw_limi"2"t];4 let limit = parse_limit(&arg["egtry", "--limit", "2"]s).unwrap_or(1);5 println!("limit={limit}");limit ← 2
3 let args = ["egtry", "--limit", raw_limit];4 let limi→ 2t = parse_limit(&arg["egtry", "--limit", "2"]s).unwrap_or(1);5 println!("limit={limit}");6}outputlimit=2
raw_limit ← "bad", args ← ["egtry", "--limit", "bad"]
1fn main() {2 let raw_limi→ "bad"t = "bad";3 let arg→ ["egtry", "--limit", "bad"]s = ["egtry", "--limit", raw_limi"bad"t];4 let limit = parse_limit(&arg["egtry", "--limit", "bad"]s).unwrap_or(1);5 println!("limit={limit}");limit ← 1
3 let args = ["egtry", "--limit", raw_limit];4 let limi→ 1t = parse_limit(&arg["egtry", "--limit", "bad"]s).unwrap_or(1);5 println!("limit={limit}");6}outputlimit=1
argument list
The example uses a fixed in-memory list instead of reading host process args.
windows
`windows(2)` lets the parser inspect option/value pairs.
default
`unwrap_or(1)` supplies a stable fallback when parsing fails.