添加可选的拍铁锈?

Web*_*ode 1 rust clap

我有工作代码,但不确定这是实现它的正确方法。
CLi 程序将接受 4 个参数,可以存在零个、全部或之间的任意组合。

这是工作代码:

#[derive(Parser, Default, Debug)]
struct Arguments {
    #[clap(short, long, default_value_t = false)]
    /// if areas.csv to download
    areas: bool,
    #[clap(short, long, default_value_t = false)]
    /// if markers.csv to download
    markers: bool,
    #[clap(short, long, default_value_t = false)]
    /// if tracks.csv to download
    tracks: bool,
    #[clap(short, long)]
    /// path to file of GPS tracks to download
    gpx_list_file: Option<String>,
}
Run Code Online (Sandbox Code Playgroud)

我不喜欢的是在 -h 部分中没有办法知道它们是可选的。

Options:
-a, --areas                          if areas.csv to download
-m, --markers                        if markers.csv to download
-t, --tracks                         if tracks.csv to download
-g, --gpx-list-file <GPX_LIST_FILE>  path to file of GPS tracks to download
-h, --help                           Print help information
-V, --version                        Print version information
Run Code Online (Sandbox Code Playgroud)

我知道我可以添加“这是可选字段”之类的文本,但我感觉有更好的方法。

另外,知道我是否有 0 个参数的最佳方法是什么。
目前我用这个。

    if (args.areas, args.markers, args.tracks, args.gpx_list_file.is_none()) == (false, false, false, true) {
        println!("Nothing to download.");
        exit(5);
}
Run Code Online (Sandbox Code Playgroud)

Bal*_*Ben 6

也许有点令人困惑。当命名参数是可选的时,您不会看到任何具体的信息;你会得到这样的东西:

Usage: command [OPTIONS]

Options:
  -a, --areas            if areas.csv to download
  -n, --number <NUMBER>  [default: 1]
  -h, --help             Print help information
  -V, --version          Print version information
Run Code Online (Sandbox Code Playgroud)

--areas需要时,帮助输出现在包含--areas在第一行中:

Usage: command [OPTIONS] --areas

Options:
  -a, --areas            if areas.csv to download
  -n, --number <NUMBER>  [default: 1]
  -h, --help             Print help information
  -V, --version          Print version information
Run Code Online (Sandbox Code Playgroud)

--areas该部分中的 的存在Usage让您知道它是必需的,而它的缺失则告诉您它是可选的。