4 个版本
0.0.4 | 2024 年 8 月 1 日 |
---|---|
0.0.3 | 2024 年 7 月 31 日 |
0.0.2 | 2024 年 7 月 31 日 |
0.0.1 | 2024 年 7 月 31 日 |
#1101 在 解析器实现
每月 284 次下载
23KB
458 行
serde-double-tag
这个crate提供了为 serde
的双重标签枚举表示提供 derive 宏。它基本上是外部和相邻标签枚举的组合。
如果你启用了 schemars
功能,该crate还公开了一个 derive 宏,用于 schemars::JsonSchema
特性。
例如,考虑这个枚举
#[derive(serde_double_tag::Deserialize, serde_double_tag::Serialize)]
#[serde(tag = "species")]
#[serde(rename_all = "snake_case")]
enum Friend {
Human {
name: String,
hobbies: Vec<String>,
},
Dog {
name: String,
color: String,
}
}
A Friend::Human
将被序列化为
{
"species": "human",
"human": {
"name": "Zohan",
"hobbies": ["hair dressing"],
}
}
同样,一个 Friend::Dog
将被序列化为
{
"species": "dog",
"dog": {
"name": "Scrappy",
"color": "white and gray",
}
}
这种枚举表示可能很有用,如果你想在单个文件或数据库中同时存在不同变体的数据。由于每个变体使用不同的字段名,它们永远不会冲突。并且由于还有一个单独的枚举标签字段,你仍然可以知道哪个变体实际上是激活的。
目前支持的 serde
属性
- `#[serde(rename = "...")]
- `#[serde(rename_all = "...")]
- `#[serde(rename_all_fields = "...")]
- `#[serde(deny_unknown_fields = "...")]
依赖关系
~0.4–1.3MB
~28K SLoC