如何在Rust的serde_yaml中使用Yaml引用?

6

我该如何在serde YAML中使用yaml标签?它是否支持它?

例如:

field1: &tag
  - item

field2: *tag

我尝试使用引用,但是无法解决生命周期问题,而std::rc:Rc<>违反了Deserialize的所有权要求。


这个反序列化很好,它只是将field1的内容复制到field2,对吗? - isaactfa
1
@isaactfa,所以我的理解是,它可以工作但不能保留引用?也就是说,它会用数据副本替换引用?这有点遗憾,因为当再次序列化时,标签可能已经丢失了...但我想serde确实不适合处理引用。 - Finomnis
是的,我不认为有一种默认的方法可以将其反序列化回来。 - isaactfa
很遗憾。复制这些字段对我来说不是问题,但我肯定需要在某个时候将此结构序列化回yaml。 - Luctins
1个回答

5
serde-yaml 中,对 YAML 标签和别名的支持功能可用但不完整。它可以通过简单地重复数据来反序列化标签,但不能使用标签进行序列化。这个 crate 的主要工作是作为 YAML 和 serde 的数据模型之间的适配器,该数据模型不支持别名。
Issue #177: enable support for tags when serializing中,dtolnay回应道:

我认为我不想将这个功能内置到这个crate中。有人可以构建一个更加功能丰富的 YAML 发射器,以公开这种东西。

当然还有其他与 YAML 相关的 crates,但我不知道哪些可以保留或允许你编码别名。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接