Rust 是否可以有条件地启用像“派生”这样的属性?

Rust 是否可以有条件地启用像“派生”这样的属性?,rust,Rust,我在板条箱中添加了一个功能,它增加了serde支持。但是,我不太明白如何正确使用它: // #[derive(Debug, Serialize, Deserialize, Clone)] // goes to: #[derive(Debug, Clone)] #[cfg(feature = "serde_support")] #[derive(Serialize, Deserialize)] pub struct MyStruct; 此代码将以下所有内容视为有条件编译的cfg(feature

我在板条箱中添加了一个功能,它增加了
serde
支持。但是,我不太明白如何正确使用它:

// #[derive(Debug, Serialize, Deserialize, Clone)] // goes to:

#[derive(Debug, Clone)]
#[cfg(feature = "serde_support")]
#[derive(Serialize, Deserialize)]
pub struct MyStruct;
此代码将以下所有内容视为有条件编译的
cfg(feature)
,因此如果没有我的
serde\u支持
功能,我的板条箱也不会有
MyStruct

我试图用大括号将其括起来,但它给出了另一个错误:

代码:

错误:

错误:属性后应有项
-->mycrate/src/lib.rs:65:33
|
65 |#[cfg(feature=“serde_support”)]{
|                                 ^

那么如何做到这一点呢?

您可以使用
cfg\u attr(a,b)
属性:

#[derive(Debug, Clone)]
#[cfg_attr(feature = "serde_support", derive(Serialize, Deserialize))]
pub struct MyStruct;
如图所示:

如果
cfg
设置了
a
,则与
#[b]项
相同,否则与
相同


这是非常有用的-奇怪的是它没有更好地暴露在文档中。
#[derive(Debug, Clone)]
#[cfg_attr(feature = "serde_support", derive(Serialize, Deserialize))]
pub struct MyStruct;
#[cfg_attr(a, b)]
item