[−][src]Crate getargs
A truly zero-cost argument parser.
About
getargs
is a low-level, efficient, and versatile argument parser
that works similarly to "getopts". It works by producing a stream
of options, and after each option, your code decides whether to
require and retrieve the value for the option or not.
You do not have to declare a list of valid options. Therefore, you write your own help message.
Basic example
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> { attack_mode: bool, em_dashes: bool, execute: &'a str, set_version: u32, 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? { // -a or --attack Opt::Short('a') | Opt::Long("attack") => res.attack_mode = true, // Unicode short options are supported Opt::Short('\u{2014}') => res.em_dashes = true, // -e EXPRESSION, or -eEXPRESSION, or // --execute EXPRESSION, or --execute=EXPRESSION Opt::Short('e') | Opt::Long("execute") => res.execute = opts.value_str()?, // Automatically parses the value as a u32 Opt::Short('V') => res.set_version = opts.value()?, // An unknown option was passed 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); }
Structs
Options | An argument parser. |
Enums
Error | A parse error. |
Opt | A short or long option. |
Type Definitions
Result |