Argonaut
An argument parser for Rust, that grants as much control over the parser as possible.
Example
This can be found in examples/main.rs as well, and be run with cargo run --example main
.
extern crate argonaut;
use argonaut::{Parser, Arg};
use argonaut::ParseStatus::{Parsed, Interrupted};
use std::env;
fn main() {
println!("Argonaut!");
let arg_vec: Vec<_> = env::args().skip(1).collect();
let mut args: Vec<&str> = Vec::new();
for arg in arg_vec.iter() {
args.push(arg);
}
println!("Args: {:?}", args);
let mut parser = Parser::new();
let foo = Arg::positional("foo");
let bar = Arg::required_trail("bar");
let help = Arg::short_and_long('h', "help").interrupt_flag();
let version = Arg::long("version").interrupt_flag();
let verbose = Arg::short_and_long('v', "verbose").flag();
let exclude = Arg::short_and_long('x', "exclude").single(Some("foo"));
let extra = Arg::short('e').zero_or_more(None);
let add = Arg::short_and_long('a', "add").one_or_more(None);
parser.add(&foo).unwrap();
parser.add(&bar).unwrap();
parser.add(&help).unwrap();
parser.add(&version).unwrap();
parser.add(&verbose).unwrap();
parser.add(&exclude).unwrap();
parser.add(&extra).unwrap();
parser.add(&add).unwrap();
match parser.parse(&args) {
Ok(Parsed(parsed)) => {
println!("Parsed succesfully!");
println!("Foo: {}", parsed.positional(0).unwrap());
println!("Bar: {:?}", parsed.trail(1).unwrap());
println!("Verbose: {}", parsed.long("verbose").switch().unwrap());
println!("Exclude: {:?}", parsed.short('x').single().unwrap());
println!("Extra: {:?}", parsed.short('e').multiple().unwrap());
println!("Add: {:?}", parsed.long("add").multiple().unwrap());
},
Ok(Interrupted(flag)) => {
println!("Interrupt flag!");
if flag.is_short('h') {
println!("Help requested!");
} else if flag.is_long("version") {
println!("Version ZERO POINT ZERO!");
}
}
Err(error) => {
println!("Parse error: {:?}", error);
},
}
}
Terminology
Flag: The identifying token for an argument (--flag)
Switch: A flag with no arguments that is either there or not there
Parameter: Tokens following an argument.
Trail: Zero or more tokens that follow the required positional arguments.
License
Licensed under either of
at your option.
Contribution
Unless you explicitly state otherwise, any contribution intentionally submitted
for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any
additional terms or conditions.