rust - 使用 Serde 进行序列化时,有没有办法对结构的字段进行分组,例如“flatten”属性的反转?
问题描述
Serde 具有扁平化数据结构的一层的flatten
属性。我想要相反的:一种对属性进行分组的方法。
我有结构
struct Foo {
owner: Owner,
alpha: Server,
beta: Server,
}
我希望服务器以嵌套方式序列化,例如:
[owner]
name = "Tom Preston-Werner"
dob = 1979-05-27T07:32:00-08:00 # First class dates
[servers]
[servers.alpha]
ip = "10.0.0.1"
dc = "eqdc10"
[servers.beta]
ip = "10.0.0.2"
dc = "eqdc10"
默认情况下,Serde 会产生:
[owner]
name = "Tom Preston-Werner"
dob = 1979-05-27T07:32:00-08:00 # First class dates
[alpha]
ip = "10.0.0.1"
dc = "eqdc10"
[beta]
ip = "10.0.0.2"
dc = "eqdc10"
这是我不想要的。有没有办法在不重构我的结构的情况下获得第一个 YAML 输出?
解决方案
如果Foo
由于某种原因无法重构,也许您可以创建一个新的结构来捕获嵌套结构并使用 Serdefrom
和into
属性Foo
通过它进行序列化。
例子
#[derive(Clone)]
#[serde(from = "IntermediateFoo", into = "IntermediateFoo")]
pub struct Foo {
owner: Owner,
alpha: Server,
beta: Server,
}
impl From<Foo> for IntermediateFoo {
/* ... */
}
impl From<IntermediateFoo> for Foo {
/* ... */
}
#[derive(Serialize, Deserialize)]
struct IntermediateFoo {
owner: Owner,
servers: IntermediateServers,
}
#[derive(Serialize, Deserialize)]
struct IntermediateServers {
alpha: Server,
beta: Server,
}
推荐阅读
- javascript - 在条件三元中处理多个 useState
- terraform - 防止 Terraform 破坏特定资源
- javascript - 从javascript中的下拉列表创建文本框
- sql - 计算具有特定条件的出现次数
- node.js - AWS Lambda DynamoDB putItem 总是执行两次
- python - 迭代DataFrame中的行时如何避免TypeError?
- excel - 如何在 Excel 中为数据透视表创建动态相对源数据?
- adal - 使用主题名称 + 颁发者身份验证访问 KeyVault
- aframe - AFrame:物理问题;动态车身和可抓取
- algorithm - 两个作业队列的最优调度顺序