cmder 0.6.1

A simple, lightweight, command line argument parser for rust codebases
Documentation
use cmder::{Command, ParserMatches, Program};

fn create_default_program(cb: fn(ParserMatches)) -> Command<'static> {
    let mut program = Program::new();

    program
        .author("vndaba")
        .version("0.1.0")
        .description("A test for subcommands")
        .bin_name("complex");

    let img_cmd = program.subcommand("image");

    img_cmd
        .subcommand("prune")
        .argument("[image-name]", "The name of the image to prune")
        .alias("p")
        .option("-a --all", "Remove all unused images")
        .option("-p --port <port-number>", "Prune containers on given ports")
        .description("Remove the provided image or all unused images")
        .action(cb);

    img_cmd
        .alias("i")
        .description("A subcommand housing image functionality");

    program
}

#[test]
fn test_full_args() {
    let mut program = create_default_program(first_cb);
    program.parse_from(vec![
        "complex", "i", "prune", "cont-one", "-a", "-p=8080", "-p=5053", "--", "ng", "-pre",
    ]);
}

#[test]
fn test_options_syntax() {
    let mut program = create_default_program(first_cb);
    program.parse_from(vec![
        "complex", "i", "prune", "cont-one", "-a", "-p", "8080", "-p", "5053", "--", "ng", "-pre",
    ]);
}

fn first_cb(m: ParserMatches) {
    let cmd = m.get_matched_cmd();

    assert!(cmd.is_some());

    let cmd = cmd.unwrap();
    assert!(cmd.get_parent().is_some());
    assert!(cmd.get_parent().unwrap().get_parent().is_some());
    assert!(m.contains_flag("-a"));

    assert_eq!(cmd.get_name(), "prune");
    assert_eq!(m.get_arg("[image-name]"), Some("cont-one".to_string()));
    assert_eq!(m.get_instances_of("<port-number>"), vec!["8080", "5053"]);
    assert_eq!(m.get_positional_args(), vec!["ng", "-pre"]);
}

#[test]
fn test_optional_args() {
    let mut program = create_default_program(second_cb);
    program.parse_from(vec!["complex", "i", "prune", "-a"]);
}

fn second_cb(m: ParserMatches) {
    let cmd = m.get_matched_cmd();

    assert!(cmd.is_some());

    let cmd = cmd.unwrap();
    assert!(m.contains_flag("-a"));
    assert_eq!(cmd.get_name(), "prune");
    assert_eq!(m.get_arg("[image-name]"), None);
}