mod-cli 0.6.4

A fully customizable, feature-rich CLI framework for Rust. Define commands, prefixes, styled output, and more—built for flexibility and speed.
Documentation
use modcli::args;
use modcli::error::ModCliError;

#[test]
fn flag_detects_presence_and_truthy_equal() {
    let argv = vec![
        "--alpha".to_string(),
        "--beta=true".to_string(),
        "--gamma=YES".to_string(),
        "--delta=0".to_string(),
    ];
    assert!(args::flag(&argv, "--alpha"));
    assert!(args::flag(&argv, "--beta"));
    assert!(args::flag(&argv, "--gamma"));
    assert!(!args::flag(&argv, "--delta"));
    assert!(!args::flag(&argv, "--missing"));
}

#[test]
fn get_string_reads_split_and_equals() {
    let argv = vec![
        "--name".to_string(),
        "james".to_string(),
        "--host=localhost".to_string(),
    ];
    assert_eq!(args::get_string(&argv, "--name").as_deref(), Some("james"));
    assert_eq!(
        args::get_string(&argv, "--host").as_deref(),
        Some("localhost")
    );
    assert_eq!(args::get_string(&argv, "--missing"), None);
}

#[test]
fn get_int_parses_and_errors() {
    let ok = vec!["--port=8080".to_string()];
    let bad = vec!["--port".to_string(), "abc".to_string()];
    let miss: Vec<String> = vec![];

    let p: u16 = args::get_int(&ok, "--port").unwrap();
    assert_eq!(p, 8080);

    let e = args::get_int::<u16>(&bad, "--port").unwrap_err();
    match e {
        ModCliError::InvalidUsage(msg) => assert!(msg.contains("expected numeric")),
        other => panic!("unexpected error: {other:?}"),
    }

    let e2 = args::get_int::<u16>(&miss, "--port").unwrap_err();
    match e2 {
        ModCliError::InvalidUsage(msg) => assert!(msg.contains("missing required argument")),
        other => panic!("unexpected error: {other:?}"),
    }
}

#[test]
fn get_bool_supports_key_and_equals() {
    let argv = vec![
        "--verbose".to_string(),
        "--debug=false".to_string(),
        "--trace=Yes".to_string(),
    ];
    assert_eq!(args::get_bool(&argv, "--verbose").unwrap(), true);
    assert_eq!(args::get_bool(&argv, "--debug").unwrap(), false);
    assert_eq!(args::get_bool(&argv, "--trace").unwrap(), true);
}