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