Eon*_*nil 7 rust clap structopt
clappossible_values允许您使用这样的方式提供接受值的列表。
let mode_vals = ["fast", "slow"];
.possible_values(&mode_vals)
Run Code Online (Sandbox Code Playgroud)
如何做到这一点structopt?
小智 8
从0.3 开始,您可以直接使用和structopt中的任何方法:AppArg
const MODE_VALS: &[&str] = &["fast", "slow"];
#[derive(StructOpt, Debug)]
struct Opt {
/// The velocity mode
#[structopt(short, long, possible_values(MODE_VALS))]
mode: String,
}
Run Code Online (Sandbox Code Playgroud)
clap\xe2\x80\x99spossible_values作为字段选项公开,如本structopt示例所示所示:
//! How to use `arg_enum!` with `StructOpt`.\n\nuse clap::arg_enum;\nuse structopt::StructOpt;\n\narg_enum! {\n #[derive(Debug)]\n enum Baz {\n Foo,\n Bar,\n FooBar\n }\n}\n\n#[derive(StructOpt, Debug)]\nstruct Opt {\n /// Important argument.\n #[structopt(possible_values = &Baz::variants(), case_insensitive = true)]\n i: Baz,\n}\n\nfn main() {\n let opt = Opt::from_args();\n println!("{:?}", opt);\n}\nRun Code Online (Sandbox Code Playgroud)\n\n值得注意的是,这是利用case_insensitive,这也允许接受这些变体的任何情况。
如果您想要更精细的控制,您可以省略case_insensitive并自行实现变体:
use structopt::StructOpt;\n\n#[derive(Debug)]\nenum Baz {\n Foo,\n Bar,\n FooBar\n}\n\nimpl Baz {\n fn variants() -> [&\'static str; 3] {\n ["foo", "bar", "foo-bar"]\n }\n}\n\n#[derive(StructOpt, Debug)]\nstruct Opt {\n /// Important argument.\n #[structopt(possible_values = &Baz::variants())]\n i: Baz,\n}\n\nfn main() {\n let opt = Opt::from_args();\n println!("{:?}", opt);\n}\nRun Code Online (Sandbox Code Playgroud)\n\n最后,您还可以以相同的方式使用字符串数组。
\n