12 个版本

使用旧的 Rust 2015

0.3.6 2018年5月30日
0.3.5 2018年5月30日
0.3.1 2018年4月30日
0.2.1 2018年4月30日
0.1.2 2018年4月30日

#538命令行界面

MIT/Apache

28KB
557

foropts-rs: Rust 的迭代器风格选项解析

Build Status Crates.io License: MIT License: Apache 2.0

大多数参数解析库,如 clap,将参数视为多值映射;foropts 将参数视为序列。这通常不是你想要的,但偶尔也是。

用法

它位于 crates.io,因此你可以将其添加到

[dependencies]
foropts = "0.3.6"

你的 Cargo.toml 中,并

extern crate foropts;

添加到你的 crate 根目录中。

此 crate 支持 Rust 版本 1.22 及以后版本。

示例

在这个示例中,我们接受一个布尔标志 -v(或 --verbose),以及两个字符串选项,-b(或 --before)和 -a(或 --after)。字符串选项构建一个字符串,其中 -a-b 出现的相对顺序很重要。当你的参数被视为多值映射时,这很困难,但当你可以顺序迭代它们时,则很容易。

use foropts;

enum Opt {
    Before(String),
    After(String),
    Verbose,
}

let config =
    foropts::Config::new("build_string_example")
        .arg(foropts::Arg::parsed_param("BEFORE", Opt::Before)
             .short('b').long("before"))
        .arg(foropts::Arg::parsed_param("AFTER", Opt::After)
             .short('a').long("after"))
        .arg(foropts::Arg::flag(|| Opt::Verbose)
             .short('v').long("verbose"));

let mut verbose     = false;
let mut accumulator = String::new();

let opts = ["-b1", "-va", "2", "--after=3", "--before", "4"]
    .iter().map(ToString::to_string);

for opt in config.iter(opts) {
    match opt.unwrap_or_else(|e| config.exit_error(&e)) {
        Opt::Before(s) => accumulator = s + &accumulator,
        Opt::After(s)  => accumulator = accumulator + &s,
        Opt::Verbose   => verbose = true,
    }
}

assert_eq!( "4123", accumulator );
assert!( verbose );

无运行时依赖