我有接受 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