我想在我的 crate 中添加一个功能,可以选择使某些结构可序列化,特别是,我想使用 Serde 的自定义派生宏。Serde 依赖项是可选的,extern crate并且有条件地包含在功能后面的声明。考虑以下:
#[derive(Eq, PartialEq, Serialize)]
struct MyStruct {
a: u8,
b: u8
}
Run Code Online (Sandbox Code Playgroud)
启用功能标志后,一切正常。禁用它后,我收到此警告:
#[derive(Eq, PartialEq, Serialize)]
struct MyStruct {
a: u8,
b: u8
}
Run Code Online (Sandbox Code Playgroud)
有没有办法有条件地包含派生特征?我正在使用 Rust 1.15 稳定版。
我应该为错误消息提交问题吗?它似乎具有误导性。
She*_*ter 11
像许多其他基于特征的条件编译一样,使用cfg_attr:
#[cfg_attr(feature = "example", derive(Debug))]
struct Foo;
fn main() {
println!("{:?}", Foo);
}
Run Code Online (Sandbox Code Playgroud)
有了这个,cargo run将无法编译,因为Debug没有为 实现Foo,但cargo run --features example会编译并成功运行。