我想在我的包中添加一个功能,它可以选择性地使某些结构可序列化,特别是,我想使用Serde的自定义派生宏。 Serde依赖项是可选的,extern crate
声明有条件地包含在该功能后面。请考虑以下事项:
#[derive(Eq, PartialEq, Serialize)]
struct MyStruct {
a: u8,
b: u8
}
启用功能标志后,一切正常。禁用它后,我收到此警告:
error: '#[derive]' for custom traits is not stable enough for use. It is deprecated and will be removed in v1.15 (see issue #29644)
有没有办法有条件地包含衍生特征?我正在使用Rust 1.15稳定版。
我应该为错误消息提交问题吗?这似乎有误导性。
答案 0 :(得分:4)
与许多其他基于特征的条件编译一样,使用cfg_attr
:
#[cfg_attr(feature = "example", derive(Debug))]
struct Foo;
fn main() {
println!("{:?}", Foo);
}
这样,cargo run
将无法编译,因为Debug
未实现Foo
,但cargo run --features example
将成功编译并运行。