7 个不稳定版本

0.4.1 2023年1月4日
0.4.0 2022年12月31日
0.3.1 2021年8月25日
0.3.0 2020年5月6日
0.1.1 2019年10月17日

#802命令行界面

Download history 58/week @ 2024-04-12 42/week @ 2024-04-19 9/week @ 2024-04-26 66/week @ 2024-05-03 68/week @ 2024-05-10 51/week @ 2024-05-17 72/week @ 2024-05-24 30/week @ 2024-05-31 22/week @ 2024-06-07 16/week @ 2024-06-14 35/week @ 2024-06-21 18/week @ 2024-06-28 18/week @ 2024-07-05 26/week @ 2024-07-12 30/week @ 2024-07-19 38/week @ 2024-07-26

113 每月下载量
用于 2 crates

Apache-2.0

18KB
256

arg

Actions Status Crates.io Documentation

非常简单的命令行参数解析代码生成器。

无依赖。

功能

  • std - 启用需要 std 库的实用工具。

调试

将环境变量 ARG_RS_PRINT_PARSER 设置为除 0false 之外的任何值,以打印解析结果


lib.rs:

Arg 是一个简单的命令行参数解析器,无任何依赖

功能

  • std - 启用需要 std 库的实用工具。

语法

字段

Arg

  • short - 指定带有短切换的标志。可选地可以提供标志。
  • long - 指定带有长切换的标志。可选地可以提供标志。
  • default_value - 指定要使用的默认值。可以作为字符串提供初始化表达式。否则使用 Default 特性。
  • required - 指定参数是否必需。默认情况下所有参数都是可选的。但布尔值不能标记为 required
  • sub - 指定字段为子命令。只有一个子命令,它与收集其余参数的 Vec<_> 参数互斥。所有其他选项不应用于 sub 类型的字段。

类型

  • 标志 - 是 bool 开关,当 bool 是参数类型时自动选择。每次提供标志都会导致 !previous_state
  • 选项 - 接受值的开关。用于任何非 Vec 类型。自动覆盖。
  • 多选项 - 具有类型 Vec<T> 的开关,允许累积多个开关的值。
  • 参数 - 普通参数,接受值。
  • 多参数 - 参数集合,累积到 Vec<T> 中,只能有一个。
  • 子命令 - 将剩余参数传播到另一个解析器,只能有一个。

转换

默认情况下,所有类型(除了 bool 标志)都使用 FromStr::from_str 从字符串解析值。

可选

如果类型是 Option<T>,则假设参数是可选的,在这种情况下,不能使用 requireddefault_value 标记。

因此,不提供参数不会使解析器失败。

子命令

它依赖于枚举来表示子命令。

注意,当使用子命令时,就不再可能将多个参数收集到数组中,这会导致编译错误。

子命令消耗所有剩余的参数,因此必须在子命令调用之前传递顶级命令标志/选项。

use arg::Args;

#[derive(Args, Debug)]
///First
struct First {
    #[arg(short, long)]
    ///About this flag
    flag: bool,

    #[arg(short = "v", long = "velocity", default_value = "42")]
    ///This is felocity. Default value is 42.
    speed: u32,
}

#[derive(Args, Debug)]
///Second
struct Second {
    #[arg(short = "v", long = "velocity", default_value = "42")]
    ///This is velocity. Default value is 42.
    speed: u32,
    ///To store rest of paths
    paths: Vec<String>,
}

#[derive(Args, Debug)]
///My subcommand with implicit command 'help` to list commands
enum MySubCommand {
    ///my first command
    First(First),
    ///my second command
    Second(Second),
}

#[derive(Args, Debug)]
struct MyArgs {
    #[arg(short, long)]
    ///About this flag
    verbose: bool,
    #[arg(sub)]
    ///My sub command. Use `help` to show list of commands.
    cmd: MySubCommand
}

用法

以下是一个综合示例,说明处理标志和选项的所有方法

use arg::Args;

#[derive(Args, Debug)]
///my_exe 0.1.0
///About my program
///
///About my program
struct MyArgs {
    #[arg(short, long)]
    ///About this flag
    flag: bool,

    #[arg(long = "verbose")]
    ///Verbose mode
    verbose: Option<bool>,

    #[arg(short = "v", long = "velocity", default_value = "42")]
    ///This is velocity. Default value is 42.
    speed: u32,

    #[arg(short = "g", long = "gps")]
    ///GPS coordinates.
    gps: Vec<u32>,

    ///To store path
    path: String,

    ///To store path 2
    path2: String,

    ///To store rest of paths as multi argument collector
    remain_paths: Vec<String>,
}

fn main() {
    match MyArgs::from_text("-v path1 path2") {
        Ok(args) => println!("args={:?}", args),
        Err(err) => println!("err={:?}", err),
    }
}

依赖关系

~2MB
~37K SLoC