use nanoargs::{range, ArgBuilder, Opt, ParseError, Pos};
fn main() {
let parser = ArgBuilder::new()
.name("error-demo")
.description("Demonstrates ParseError variant handling")
.version("0.1.0")
.option(Opt::new("output").placeholder("FILE").desc("Output file").short('o').required())
.option(
Opt::new("port")
.placeholder("NUM")
.desc("Port number")
.short('p')
.default("8080")
.validate(range(1, 65535)),
)
.positional(Pos::new("input").desc("Input file").required())
.build()
.unwrap();
match parser.parse_env() {
Ok(result) => {
println!("output: {:?}", result.get_option("output"));
println!("input: {:?}", result.get_positionals());
}
Err(ParseError::HelpRequested(text)) => print!("{text}"),
Err(ParseError::VersionRequested(text)) => println!("{text}"),
Err(ParseError::MissingRequired(name)) => {
eprintln!("Missing required argument: {name}");
eprintln!("Hint: provide --{name} or see --help for usage.");
}
Err(ParseError::MissingValue(name)) => {
eprintln!("Option --{name} requires a value.");
eprintln!("Hint: use --{name} <value>.");
}
Err(ParseError::UnknownArgument(token)) => {
eprintln!("Unknown argument: {token}");
eprintln!("Hint: run with --help to see available options.");
}
Err(ParseError::DuplicateOption(name)) => {
eprintln!("Option --{name} was provided more than once.");
eprintln!("Hint: this option only accepts a single value.");
}
Err(ParseError::ValidationFailed { name, message }) => {
eprintln!("Validation failed for {name}: {message}");
eprintln!("Hint: check the allowed values with --help.");
}
Err(e) => eprintln!("error: {e}"),
}
}