noshell-parser 0.5.0

noshell, a no_std argument parser and a shell for constrained systems.
Documentation
use core::panic;

use noshell_parser::{
    ParsedArgs,
    lexer::Flag,
    parser::{ArgLookupTable, AtMost},
};

struct MyArgs {
    field1: u32,
    field2: Option<u32>,
}

fn main() {
    static LOOKUP: ArgLookupTable<'_> =
        ArgLookupTable::new(&[(Flag::Long("field1"), "field1", AtMost::One)]);

    let argv = &["--field1", "42"];
    let parsed: ParsedArgs<'_, 1> = ParsedArgs::parse_from(argv, &LOOKUP);

    let args = MyArgs {
        field1: parsed
            .try_get_one("field1")
            .expect("must be parsed")
            .expect("must be present")
            .expect("must have a value"),

        field2: parsed
            .try_get_one::<u32>("field2")
            .expect("must be parsed")
            .map(|v| {
                v.ok_or(noshell_parser::Error::MissingArgument)
                    .expect("must have a value")
            }),
    };

    if 42 != args.field1 {
        panic!("invalid field1");
    }

    if args.field2.is_none() {
        panic!("invalid field2");
    }
}