我想有两个相互冲突的选项,但还必须选择其中一个:
#[macro_use]
extern crate structopt;
use structopt::StructOpt;
#[derive(StructOpt)]
struct Opt {
#[structopt(
long = "foo",
required_unless = "bar",
conflicts_with = "bar",
)]
foo: Option<String>,
#[structopt(
long = "bar",
required_unless = "foo"),
]
bar: Option<String>,
}
fn main() {
let args = Opt::from_args();
println!("{:?}", args.foo);
println!("{:?}", args.bar);
}
这是编译器(v1.28.0)提示的地方:
error: proc-macro derive panicked
--> src/main.rs:6:10
|
6 | #[derive(StructOpt)]
| ^^^^^^^^^
|
= help: message: invalid structopt syntax: attr
最佳答案
结尾处带有多余#[stuff(...),]
的,
不是有效的属性语法。如果您解决了这种错字,您的代码就可以正常工作。
#[structopt(
long = "bar",
required_unless = "foo", // no `)` on this line.
)] // put `)` on this line, no `,` after it
bar: Option<String>,
关于rust - proc-macro panic ,使用structopt,使用required_unless和conflicts_with,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51750975/