clap允许您像这样使用possible_values提供可接受的值列表。
let mode_vals = ["fast", "slow"];
.possible_values(&mode_vals)如何使用structopt实现这一点
发布于 2021-04-28 16:22:01
从structopt 0.3开始,您可以直接使用App和Arg中的任何方法
const MODE_VALS: &[&str] = &["fast", "slow"];
#[derive(StructOpt, Debug)]
struct Opt {
/// The velocity mode
#[structopt(short, long, possible_values(MODE_VALS))]
mode: String,
}发布于 2020-04-12 07:17:49
clap的possible_values显示为字段选项,如this structopt example中所示
//! How to use `arg_enum!` with `StructOpt`.
use clap::arg_enum;
use structopt::StructOpt;
arg_enum! {
#[derive(Debug)]
enum Baz {
Foo,
Bar,
FooBar
}
}
#[derive(StructOpt, Debug)]
struct Opt {
/// Important argument.
#[structopt(possible_values = &Baz::variants(), case_insensitive = true)]
i: Baz,
}
fn main() {
let opt = Opt::from_args();
println!("{:?}", opt);
}值得注意的是,这也利用了case_insensitive,以允许接受这些变体的任何情况。
如果你想要更细粒度的控制,你可以省略case_insensitive,自己实现变种:
use structopt::StructOpt;
#[derive(Debug)]
enum Baz {
Foo,
Bar,
FooBar
}
impl Baz {
fn variants() -> [&'static str; 3] {
["foo", "bar", "foo-bar"]
}
}
#[derive(StructOpt, Debug)]
struct Opt {
/// Important argument.
#[structopt(possible_values = &Baz::variants())]
i: Baz,
}
fn main() {
let opt = Opt::from_args();
println!("{:?}", opt);
}最后,您也可以以同样的方式使用字符串数组。
https://stackoverflow.com/questions/59115832
复制相似问题