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 在 命令行界面 中
28KB
557 行
foropts-rs: Rust 的迭代器风格选项解析
大多数参数解析库,如 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 );