SERDE支持應用所使用#[derive(Serialize)]
自定義屬性:如何在程序宏中處理枚舉/結構/字段屬性?
#[derive(Serialize)]
struct Resource {
// Always serialized.
name: String,
// Never serialized.
#[serde(skip_serializing)]
hash: String,
// Use a method to decide whether the field should be skipped.
#[serde(skip_serializing_if = "Map::is_empty")]
metadata: Map<String, String>,
}
我明白瞭如何實現程序宏(Serialize
在這個例子中),但我應該怎麼做才能實現#[serde(skip_serializing)]
?我無法在任何地方找到這些信息。 docs甚至沒有提到這一點。我試圖看看serde-derive
源代碼,但它對我來說非常複雜。
您能否提供一個如何做到這一點的簡單例子?我看到你提到的代碼,但也有很多東西也實現了。 –
如果你使用'syn',那麼你可以通過訪問'Field'結構的'attr'字段來訪問字段的屬性。通過檢查['Struct'變體]的'syn :: MacroInput'的'body'字段來獲得'Field'結構體(https://dtolnay.github.io/syn/syn/enum.Body.html ),然後調用['fields'方法](https://dtolnay.github.io/syn/syn/enum.VariantData.html#method.fields)來獲取Field的列表 –