use just_getopt::{OptFlags, OptSpecs, OptValue};
fn main() {
let specs = OptSpecs::new()
.option("help", "h", OptValue::None) .option("help", "help", OptValue::None)
.option("file", "f", OptValue::RequiredNonEmpty)
.option("file", "file", OptValue::RequiredNonEmpty)
.option("verbose", "v", OptValue::OptionalNonEmpty)
.option("verbose", "verbose", OptValue::OptionalNonEmpty)
.flag(OptFlags::OptionsEverywhere);
let args = std::env::args().skip(1);
let parsed = specs.getopt(args);
eprintln!("{:#?}", parsed);
let mut error_exit = false;
for u in parsed.unknown_options() {
eprintln!("Unknown option: {u}");
error_exit = true;
}
for o in parsed.required_value_missing() {
eprintln!("Value is required for option '{}'.", o.name);
error_exit = true;
}
if error_exit {
eprintln!("Use '-h' for help.");
std::process::exit(1);
}
if parsed.option_exists("help") {
println!("Print friendly help about program's usage.");
std::process::exit(0);
}
for f in parsed.options_value_all("file") {
println!("File name: {:?}", f);
}
if parsed.option_exists("verbose") {
println!("Option 'verbose' was given.");
for v in parsed.options_value_all("verbose") {
println!("Verbose level: {:?}", v);
}
}
for o in &parsed.other {
println!("Other argument: {:?}", o);
}
}