首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用structopt将possible_values附加到结构?

如何使用structopt将possible_values附加到结构?
EN

Stack Overflow用户
提问于 2019-11-30 19:43:38
回答 2查看 701关注 0票数 2

clap允许您像这样使用possible_values提供可接受的值列表。

代码语言:javascript
复制
let mode_vals = ["fast", "slow"];
.possible_values(&mode_vals)

如何使用structopt实现这一点

EN

回答 2

Stack Overflow用户

发布于 2021-04-28 16:22:01

structopt 0.3开始,您可以直接使用AppArg中的任何方法

代码语言:javascript
复制
const MODE_VALS: &[&str] = &["fast", "slow"];

#[derive(StructOpt, Debug)]
struct Opt {
    /// The velocity mode
    #[structopt(short, long, possible_values(MODE_VALS))]
    mode: String,
}

https://github.com/TeXitoi/structopt/blob/master/CHANGELOG.md#raw-attributes-are-removed-198-by-sphynx

票数 3
EN

Stack Overflow用户

发布于 2020-04-12 07:17:49

clappossible_values显示为字段选项,如this structopt example中所示

代码语言:javascript
复制
//! 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,自己实现变种:

代码语言:javascript
复制
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);
}

最后,您也可以以同样的方式使用字符串数组。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59115832

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档