7 个稳定版本
2.2.0 | 2024 年 7 月 31 日 |
---|---|
2.1.0 | 2024 年 7 月 8 日 |
2.0.1 | 2023 年 11 月 26 日 |
2.0.0 | 2023 年 4 月 4 日 |
1.2.1 | 2023 年 3 月 27 日 |
#394 在 解析器实现
136 每月下载量
用于 touch-cli
36KB
588 行
getopt3 - 带有 GNU 扩展的 Rust CLI 解析器
版本 2.2.0 MIT 许可
特性
- GNU 参数解析规则。选项可以位于命令行中的任何位置,直到 --
- GNU -- 扩展。-- 之后的所有内容都不被视为选项。
- 不需要参数的多个选项可以分组在一起。-abc 与 -a -b -c 相同
- 参数不需要空格。-wfile 与 -w file 相同
代码质量
- Rust 对经过良好测试的 Scala getopt 代码的移植。
- 代码体积小。
- 无依赖。
- 无 Rust 的
unsafe
。 - 在稳定 Rust 上运行。
- 开发中的
no_std
Rust 版本。 - 52 个单元测试 + 1 个快速检查测试 + 7 个集成测试 + 2 个文档测试。
用法
1. 创建 getopt 实例
let g = getopt3::new(arguments, optstring)
getopt3::new 构造函数参数
- arguments 命令行参数。可以是任何可以转换为 String 迭代器的对象。您可以使用
std::env::args()
,但需要跳过第一个参数,因为它是可执行文件名。这可以通过手动完成或调用hideBin
来完成。 - optstring 是提供 AsRef<str> 的任何东西。optstring 包含合法的选项字符。如果这样的字符后面跟着一个冒号,则该选项需要一个参数。
返回值
- 函数返回 Result <getopt>。
- Result 包装解析错误和 getopt 结构。
- 只有当 optstring 无效时,解析才会失败。
2. 检查解析的选项
getopt 结构由构造函数返回,具有以下成员
- arguments : Vec <String> 带有选项的命令行参数
- options_map : 以字符为键,布尔值为值的识别选项的HashMap。选项 -> 是否有参数
- options : 以字符为键,字符串为值的解析选项的HashMap。如果选项没有参数,它映射到 "" 字符串,否则映射到其参数的字符串表示。
3. 可选 - 检查选项是否严格解析
您可以通过调用 validate(getopt) 函数来运行严格性检查。此函数在成功时返回带有提供getopt实例的结果,或者在出错时返回错误字符串。它可以检测是否遇到未知选项或缺少必需的参数,并发出错误信号。
示例用法
use std::env::args;
use getopt3::hideBin;
let rc = getopt3::new(hideBin(args()), "ab:c");
if let Ok(g) = rc {
// command line options parsed sucessfully
if let Some(arg) = g.options.get(&'b') {
// handle b argument stored in arg
};
};
参考
- POSIX getopt 函数。
- GNU libc getopt 函数。
待实现
- optstring中的两个冒号表示参数是可选的 - 这是一种POSIX未涵盖的扩展。这只会改变 validate 函数,因为我们不会在 getopt3::new 中缺少必需的参数时报告错误。
- POSIX严格模式。第一个非选项停止选项解析。这对于解析嵌套命令行是必需的。