getargs
An argument parser that is truly zero-cost, similar to getopts.
Example usage:
use std::process;
use getargs::{Error, Opt, Options, Result};
#[derive(Default, Debug)]
struct MyArgsStruct<'a> {
attack_mode: bool,
em_dashes: bool,
execute: &'a str,
positional_args: &'a [String],
}
fn parse_args<'a>(opts: &'a Options<'a, String>) -> Result<MyArgsStruct<'a>> {
let mut res = MyArgsStruct::default();
while let Some(opt) = opts.next() {
match opt? {
Opt::Short('a') | Opt::Long("attack") => res.attack_mode = true,
Opt::Short('\u{2014}') => res.em_dashes = true,
Opt::Short('e') | Opt::Long("execute") => res.execute = opts.value()?,
opt => return Err(Error::UnknownOpt(opt)),
}
}
res.positional_args = opts.args();
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
- Zero cost
- Zero copy
- Zero unsafe code
- Zero dependencies
- Simple to use yet versatile
License
MIT.