Crate minimist

Crate minimist 

Source
Expand description

Transparent, ergonomic, no-dependencies arg processing.

For when clap feels like too much.

Inspired-by, but completely unaffiliated with a library in another language that may or may not have a similar name.

See a more complete example in the repository.

§Examples

use minimist::Minimist;

let args = Minimist::parse(
    // don't forget to skip the cmd
    std::env::args_os().skip(1)
);

assert!(!args.as_flag("no-args-in-docs"));

§Flags

let args = Minimist::parse(["-ab", "--c"]);

assert!(args.as_flag("a"));
assert!(args.as_flag("b"));
assert!(args.as_flag("c"));
assert!(!args.as_flag("d"));

§Paths

let args = Minimist::parse(["--file", "pretend/this/is/not/utf8"]);

assert_eq!(
    &std::path::PathBuf::from("pretend/this/is/not/utf8"),
    args.as_one_path("file").unwrap(),
);

§Path lists

let args = Minimist::parse(["-f", "/f1", "-f", "/f2"]);

assert_eq!(
    vec![
        std::path::PathBuf::from("/f1"),
        std::path::PathBuf::from("/f2")
    ],
    args.as_list_path("f").unwrap().collect::<Vec<_>>(),
);

§Strings

let args = Minimist::parse(["--fruit", "banana"]);

assert_eq!("banana", args.to_one_str("fruit").unwrap());

§Positionals

let args = Minimist::parse(["one", "-f", "bob", "two"]);

assert_eq!(
    vec!["one", "two"],
    args.to_list_str(Minimist::POS).unwrap().collect::<Vec<_>>(),
);

§Pass-through

let args = Minimist::parse(["--t1", "1", "--", "--t2", "2"]);

assert_eq!(
    vec!["--t2", "2"],
    args.to_list_str(Minimist::PASS).unwrap().collect::<Vec<_>>(),
);

§Clear debugging

let args = Minimist::parse(
    ["pos", "-f", "-p", "/", "-s", "hello", "--", "rest"]
);

assert_eq!(
    r#"Minimist({"-": ["pos"], "--": ["rest"], "f": [], "p": ["/"], "s": ["hello"]})"#,
    format!("{args:?}"),
);

§Set defaults after parsing

let mut args = Minimist::parse(["--nope"]);

args.set_default("hello", "world");

assert_eq!("world", args.to_one_str("hello").unwrap());

§Set env defaults after parsing

unsafe { std::env::set_var("MIN_TEST", "apple") }

let mut args = Minimist::parse(["--nope"]);

args.set_default_env("test", "MIN_TEST");

assert_eq!("apple", args.to_one_str("test").unwrap());

§Alias flags after parsing

let mut args = Minimist::parse(["-h"]);

if args.as_flag("h") {
    args.entry("help".into()).or_default();
}

assert!(args.as_flag("help"));

§Alias values after parsing

let mut args = Minimist::parse(["-f", "banana", "--fruit", "apple"]);

let mut f = args.entry("f".into()).or_default().clone();
args.entry("fruit".into()).or_default().append(&mut f);

assert_eq!(
    vec!["apple", "banana"],
    args.to_list_str("fruit").unwrap().collect::<Vec<_>>(),
);

Structs§

Minimist
Transparent, ergonomic, no-dependencies arg processing.