3 个不稳定版本

使用旧的 Rust 2015

0.2.0 2017年12月2日
0.1.1 2017年12月1日
0.1.0 2017年11月30日

#2179解析实现


用于 kubeauth

WTFPL 许可证

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

许可证

WTFPL

无运行时依赖