3 个不稳定版本
使用旧的 Rust 2015
0.2.0 | 2017年12月2日 |
---|---|
0.1.1 | 2017年12月1日 |
0.1.0 | 2017年11月30日 |
#2179 在 解析实现 中
用于 kubeauth
8KB
60 行
Rust 命令行解析器 (clpr)
一个简单的 Rust 命令行解析器。
依赖项
此项目没有外部依赖项
更新内容
最新版本(0.2.0)包含以下内容
- 返回值现在是一个 Vector
- 底层改进
使用方法
将包添加到您的 Cargo.toml 文件中,然后您可以使用它来解析传入的参数和标志。
cmdparser = "0.2.0"
在将消耗该包的文件中
extern crate cmdparser;
通过调用 "parse()" 并接收一个元组来解析传入的参数和标志。
let (arguments, flags) = Parser::new().parse();
元组的第一个元素是一个 HashMap<String, Vec>,它包含从命令行接收到的所有键值参数。默认情况下,解析并接受 "-" 和 "--" 前缀。
如果用户在多个位置提供多个参数,它们将默认被覆盖。要禁用此行为,请使用
merge_values(bool)
当在解析器实例中将 merge_values 设置为 true 时,并且用户传递以下参数
$ ./executable -i foo.jpg -i bar.jpg
解析器将合并 "foo.jpg" 和 "bar.jpg" 的 "i" 参数值。如果 merge_values 设置为 false(这是默认行为),则 "i" 参数将只包含一个值 "bar.jpg"。
如果您想限制用户使用特定的前缀,请使用 strict_prefix(prefixes: Vec<String>)
方法。
let prefixes = vec!["~".to_owned()];
let (arguments, flags) = Parser::new().strict_prefix(prefixes).parse();
创建的解析器将只接受以波浪号 (~) 字符为前缀的参数。
示例
使用以下参数运行您的程序
$ cargo run -- -i foo.jpg bar.png -zero true -flag -param 100 -o
OR
$ ./executable -i foo.jpg -o bar.txt -p -r 10 -t -z -l 100
将产生以下结果
ArgumentList: {"param": ["100"], "zero": ["true"], "i": ["foo.jpg", "bar.png"]}
Flags: ["flag", "o"]
要消费它们,最简单的模式如下,对于参数
let images: Vec<String>= arguments.get("i").or(arguments.get("images")).expect("No image argument provided");
对于标志
if flags.contains(&"opaque".to_owned()) || flags.contains(&"o".to_owned()) {
action();
};
给定代码将寻找 -images 或 -i,如果找不到则 panic 并显示错误消息。
与 clap-rs 的比较
虽然 clap 是一个功能丰富、经过测试的软件包,但它有 886 个反向依赖项,对于大多数用途来说都是过度的。
性能
解析器在4c4t i5上解析100个标志和100个单值参数耗时约为1毫秒。
贡献
由于这是一个非常基础的解析器,且我Rust经验有限,如果您想贡献并改进某些内容,请提交一个pull request。
贡献者
Nenad Lukic - lnenad