1

我有接受 2 个布尔标志-d进行解码和-e编码的程序。但是,如果-e指定,则需要提供额外的消息字符串(要编码的消息)。-d如果指定,则不应存在此字符串。如何使用 structops 完成此操作?

这是我尝试过的:

#[derive(Debug, StructOpt)]
#[structopt(name="encode_test", about="encodes messages")]
struct Opt {
    #[structopt(short="e", long="encode")]
    encode: bool,

    #[structopt(requires("encode"))]
    message: String,

    #[structopt(short="d", long="decode")]
    decode: bool,
}

使用运行程序可以cargo run -- -e "test message"正常工作,但给了我未提供和参数cargo run -- -d的错误。<message>--encode

<message>仅当-e存在时我如何要求?

我还尝试了以下方法:

#[derive(Debug, StructOpt)]
#[structopt(name="encode_test", about="encodes messages")]
struct Opt {
    #[structopt(short="d", long="decode", required_unless("encode"))]
    decode: bool,

    // I've tried using conflicts_with("decode") here as well, same panic
    #[structopt(short="e", long="encode", required_unless("decode"))]
    encode: String, //does not panic if I change type here from string to bool
}

这同样适用,但在仅指定参数-e message时会出现恐慌-d

4

0 回答 0