用于解码器带内信令的替换 API
目前在 serde 实现中存在一些使用带内信令来将数据从反序列化器传递到反序列化器的特性。随着时间的推移,这将成为一个很大的问题,因为它以各种方式破坏了 serde 的互操作性。一个很好的例子是 `serde_json` 中的 `arbitrary_precision` 标志。由于 serde 没有大整数的概念,反序列化器会通过发送一个具有特殊的 `$serde_json::private::Number` 关键字的对象来内部反序列化数字。但是,这意味着如果有人尝试将其与其他值类型(像许多库一样)一起使用,就会失败。我们在自己的代码中使用了两种值类型:我们有一个 serde 内部 `Content` 类型的分支,以及一个携带额外注解的 serde_json `Value` 类型的变体。目前,如果我们将 `arbitrary_precision` 设置为特性,就会破坏一切,因为现在任何数字都会被发送为 `$serde_json::private::Number`,而我们的任何反序列化器都不支持这种类型。然而,我们也非常不舒服地启用此特性,因为即使我们修复了自己的代码,也无法避免更多的问题。我知道,正确地解决这个问题很棘手,但我确实想知道是否有必要开始扩展底层的 serde 类型系统,以便附带一些扩展数据。我认为这最终会对我们造成更大的影响。我并不完全知道最佳解决方案是什么,但我认为将 serde 类型列表扩展到包含一些内部扩展值很可能会发挥作用。与 u128 后期添加的方式类似,我们可以添加一个新的 `Signal` 值,格式可以添加额外信息。仍然不确定如何最好地实现互操作性。最有可能的是,应鼓励反序列化器在发现这种情况时调用某种默认行为。
内容来源: serde-rs/serde