4 个版本 (2 个破坏性更新)
0.3.1 | 2024年3月19日 |
---|---|
0.3.0 | 2021年1月1日 |
0.2.0 | 2020年10月26日 |
0.1.0 | 2020年10月18日 |
在 命令行界面 中排名 #188
每月下载量 108 次
19KB
218 行代码(不包括注释)
miniarg
一个最小的参数解析器,支持不使用 std 和不使用 alloc
它主要支持以下形式的 cmdlines: program -foo value -bar value
。这意味着
- 值是字符串
- 键以单个破折号开头
- 键可以出现多次
最后一个参数也可以没有值,仅是键。(这对于 -help
很有用。)
用法
将其添加到您的 Cargo.toml
[dependencies]
miniarg = "0.3"
默认启用了功能 std
,并且 alloc
和 derive
是可选的。
示例
一个最小示例如下
let cmdline = "executable -key value";
let mut args = miniarg::parse(&cmdline, &["key"]);
assert_eq!(args.next(), Some(Ok((&"key", "value"))));
assert_eq!(args.next(), None);
如果您不想传递命令行,您可以使用迭代器代替
let iter = vec!["executable", "-key", "value"].into_iter();
let mut args = miniarg::parse_from_iter(iter, &["key"]);
assert_eq!(args.next(), Some(Ok((&"key", "value"))));
assert_eq!(args.next(), None);
您可以使用 Result<Vec<_>, _>>
来获取 Vec
let cmdline = "executable -key value";
let args = miniarg::parse(&cmdline, &["key"]).collect::<Result<Vec<_>, _>>()?;
assert_eq!(args, vec![(&"key", "value")]);
如果您使用 std
或 alloc
进行编译,它也支持传递 ToString
而不是字符串,例如您的自定义枚举
#[derive(Debug, PartialEq)]
enum MyKeys {
Foo,
Bar,
}
impl std::fmt::Display for MyKeys {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
std::fmt::Debug::fmt(self, f)
}
}
let cmdline = "executable -foo value -bar value";
let args = miniarg::parse(&cmdline, &[MyKeys::Foo, MyKeys::Bar])
.collect::<Result<Vec<_>, _>>()?;
assert_eq!(args, vec![(&MyKeys::Foo, "value"), (&MyKeys::Bar, "value")]);
如你所见,枚举类型的第一个字符被转换为小写。
如果您使用 derive
进行编译,您可以使用自定义 derive
#[derive(Debug, Key, PartialEq)]
enum MyKeys {
Foo,
Bar,
}
let cmdline = "executable -foo value -bar value";
let args = MyKeys::parse(&cmdline).collect::<Result<Vec<_>, _>>()?;
assert_eq!(args, vec![(&MyKeys::Foo, "value"), (&MyKeys::Bar, "value")]);
在这种情况下,帮助文本是从枚举类型的文档注释中生成的,help_text()
获取它。
代码永远不会崩溃,但如果发生错误,返回的迭代器将包含 ParseError
您还可以查看 split_args
模块以获取更底层的访问。
许可证:MPL-2.0
依赖关系
~115KB