getargs

An argument parser that is truly zero-cost, similar to getopts.

Example usage:

```rust use std::process; use getargs::{Error, Opt, Options, Result};

// You are recommended to create a struct to hold your arguments

[derive(Default, Debug)]

struct MyArgsStruct<'a> { attackmode: bool, suppressbees: bool, em_dashes: bool, execute: &'a str, }

fn parseargs<'a>(opts: &'a Options<'a>) -> Result> { let mut res = MyArgsStruct::default(); while let Some(opt) = opts.next() { match opt? { // -a or --attack Opt::Short('a') | Opt::Long("attack") => res.attackmode = true, // -b Opt::Short('b') => res.suppressbees = true, // Unicode short options are supported Opt::Short('\u{2014}') => res.emdashes = true, // -e EXPRESSION, or -eEXPRESSION, or // --execute EXPRESSION, or --execute=EXPRESSION Opt::Short('e') | Opt::Long("execute") => res.execute = opts.arg()?, // An unknown option was passed opt => return Err(Error::UnknownOpt(opt)), } } Ok(res) }

fn main() { let args: Vec<_> = std::env::args().skip(1).collect(); let opts = Options::new(&args); let options = match parse_args(&opts) { Ok(o) => o, Err(e) => { eprintln!("usage error: {}", e); process::exit(1); } }; println!("{:#?}", options); } ```

Features

License

MIT.