Serde obsługuje stosowania atrybutów niestandardowych, które są używane z #[derive(Serialize)]
:Jak przetwarzać enum/struct/field attributes w proceduralnym makrze?
#[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>,
}
rozumiem jak zaimplementować makra proceduralną (Serialize
w tym przykładzie), ale to, co należy zrobić, aby wdrożyć #[serde(skip_serializing)]
? Nie udało mi się znaleźć tych informacji w dowolnym miejscu. The docs nawet o tym nie wspominają. Próbowałem spojrzeć na kod źródłowy serde-derive
, ale jest to dla mnie bardzo skomplikowane.
Czy możesz podać minimalny przykład tego, jak to zrobić? Widzę kod, o którym wspomniałeś, ale jest też wiele rzeczy zaimplementowanych. –
Jeśli używasz 'syn', możesz uzyskać dostęp do atrybutów pól, uzyskując dostęp do pola' attr' struktury 'Field'. Otrzymujesz strukturę 'Field' przez sprawdzenie pola' body' '' '' body' dla wariantu '' Struct' (https://dtolnay.github.io/syn/syn/enum.Body.html), a następnie wywołanie metody ['fields'] (https://dtolnay.github.io/syn/syn/enum.VariantData.html#method.fields) w celu uzyskania listy' Field's –