revparse 3.0.4

GNU Style CLI Argument Parser, that's easy to use.
Documentation
use super::*;
fn args(args: &[&str]) -> impl Iterator<Item = String> {
    args.iter().map(|i| i.to_string())
}
revparse! {
    [some_option, 's', "help message", "value"];
    [option_noval, 'o', "help message"];
    [no_short, "help message", "some"];
    [neither, "help message"];
    [ModName => basic];
    [Pos => "[some]"];
}
use basic::Revparse;
#[test]
fn val_long_vers() {
    let mut rvp = Revparse::custom_new(args(&["program_name", "--some-option", "some_val"]));
    let pos_args = rvp.get_pos_args();
    assert_eq!(pos_args.len(), 0);
    assert_eq!(rvp.some_option.unwrap(), String::from("some_val"));
}
#[test]
#[should_panic]
fn val_left_away() {
    Revparse::custom_new(args(&["n", "--some-option"]));
}
#[test]
#[should_panic]
fn too_many_pos() {
    Revparse::custom_new(args(&["n", "pos_arg", "pos_arg2"]));
}
#[test]
fn pos_args() {
    let mut rvp = Revparse::custom_new(args(&["n", "pos_arg"]));
    let pos_args = rvp.get_pos_args();
    assert_eq!(pos_args.len(), 1);
    assert_eq!(pos_args[0], "pos_arg");
}
#[test]
fn all_args() {
    let mut rvp = Revparse::custom_new(args(&[
        "n",
        "pos",
        "-osval",
        "--neither",
        "--no-short=abc"
    ]));
    let pos_args = rvp.get_pos_args();
    assert_eq!(pos_args.len(), 1);
    assert!(rvp.neither);
    assert!(rvp.option_noval);
    assert_eq!(rvp.some_option.unwrap(), "val");
    assert_eq!(rvp.no_short.unwrap(), "abc");
}
#[test]
#[should_panic]
fn short_arg_unrecognized() {
    Revparse::custom_new(args(&["n", "-z"]));
}

#[test]
#[should_panic]
fn arg_does_not_exit() {
    Revparse::custom_new(args(&["n", "--non-existant-arg"]));
}
revparse!{
    [some, 's', "help_message"];
    [PosInfinite => true];
    [ModName => rev];
}
#[test]
fn pos_infinite() {
    let mut rvp = rev::Revparse::custom_new(args(&["n", "1", "2", "3", "4", "5", "6", "last"]));
    let pos_args = rvp.get_pos_args();
    assert_eq!(pos_args.len(), 7);
    for i in 0..6 {
        assert_eq!(pos_args[i], format!("{}", i + 1))
    }
    assert_eq!(pos_args[6], "last");
}
#[test]
#[should_panic]
fn h_char() {
    Revparse::custom_new(args(&["n", "-oh"]));
}
revparse! {
    [PosMin => 2];
    [PosMax => 2];
    [ModName => pos_mod];
}
#[test]
#[should_panic]
fn max_pos() {
    pos_mod::Revparse::custom_new(args(&["n", "a", "b", "too many now"]));
}
#[test]
#[should_panic]
fn min_pos() {
    pos_mod::Revparse::custom_new(args(&["n", "only one positionl argument"]));
}
#[test]
fn test_minus_minus() {
    let mut rvp = pos_mod::Revparse::custom_new(args(&["n", "--", "--pos_arg", "--", "-another"]));
    let pos_args = rvp.get_pos_args();
    assert_eq!(pos_args.len(), 2);
    assert_eq!(pos_args[0], "--pos_arg");
    assert_eq!(pos_args[1], "-another");
}
revparse! {
    [ModName => no_pos];
}
#[test]
#[should_panic]
fn no_pos_allowed() {
    no_pos::Revparse::custom_new(args(&["n", "--"]));
}
#[test]
#[should_panic]
fn no_pos_allowed2() {
    no_pos::Revparse::custom_new(args(&["n", "pos"]));
}
revparse! {
    [r#fn, 'f', "help message"];
    [ModName => keyword];
}
#[test]
fn use_keyword_as_flag() {
    let args = keyword::Revparse::custom_new(args(&["n", "--fn"]));
    assert_eq!(args.r#fn, true);
}