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解析器实现

Download history 225/week @ 2024-07-05 33/week @ 2024-07-12 9/week @ 2024-07-19 108/week @ 2024-07-26 18/week @ 2024-08-02

136 每月下载量
用于 touch-cli

MIT 许可证

36KB
588

getopt3 - 带有 GNU 扩展的 Rust CLI 解析器

版本 2.2.0 MIT 许可

License: MIT Crates.io Version Crates.io MSRV Safe Rust dependency status Documentation Downloads

特性

  1. GNU 参数解析规则。选项可以位于命令行中的任何位置,直到 --
  2. GNU -- 扩展。-- 之后的所有内容都不被视为选项。
  3. 不需要参数的多个选项可以分组在一起。-abc 与 -a -b -c 相同
  4. 参数不需要空格。-wfile 与 -w file 相同

代码质量

  1. Rust 对经过良好测试的 Scala getopt 代码的移植。
  2. 代码体积小。
  3. 无依赖。
  4. 无 Rust 的 unsafe
  5. 在稳定 Rust 上运行。
  6. 开发中的 no_std Rust 版本。
  7. 52 个单元测试 + 1 个快速检查测试 + 7 个集成测试 + 2 个文档测试。

用法

1. 创建 getopt 实例

let g = getopt3::new(arguments, optstring)

getopt3::new 构造函数参数

  1. arguments 命令行参数。可以是任何可以转换为 String 迭代器的对象。您可以使用 std::env::args(),但需要跳过第一个参数,因为它是可执行文件名。这可以通过手动完成或调用 hideBin 来完成。
  2. optstring 是提供 AsRef<str> 的任何东西。optstring 包含合法的选项字符。如果这样的字符后面跟着一个冒号,则该选项需要一个参数。

返回值

  1. 函数返回 Result <getopt>。
  2. Result 包装解析错误和 getopt 结构。
  3. 只有当 optstring 无效时,解析才会失败。

2. 检查解析的选项

getopt 结构由构造函数返回,具有以下成员

  1. arguments : Vec <String> 带有选项的命令行参数
  2. options_map : 以字符为键,布尔值为值的识别选项的HashMap。选项 -> 是否有参数
  3. 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
     };
  };

参考

  1. POSIX getopt 函数。
  2. GNU libc getopt 函数。

待实现

  1. optstring中的两个冒号表示参数是可选的 - 这是一种POSIX未涵盖的扩展。这只会改变 validate 函数,因为我们不会在 getopt3::new 中缺少必需的参数时报告错误。
  2. POSIX严格模式。第一个非选项停止选项解析。这对于解析嵌套命令行是必需的。

无运行时依赖