我有工作代码,但不确定这是实现它的正确方法。
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)
也许有点令人困惑。当命名参数是可选的时,您不会看到任何具体的信息;你会得到这样的东西:
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让您知道它是必需的,而它的缺失则告诉您它是可选的。