递归解析JSON 文档中所有JSON$ref
的最佳方法是什么?
一种直接的方法是创建一个Deserialize
接受{"$ref"}
对象或所需值的实现,例如这样的枚举:
enum JRef<T> {
Value(T),
Ref(URI),
}
impl<'de, T> Deserialize<'de> for JRef<T> { ... }
但这需要我将所有类型都包装在 中JRef<T>
,因此我的derive(Deserialize)
模式结构充满了样板:
#[derive(Deserialize)]
struct Foo {
a: JRef<Bar>,
b: JRef<(JRef<Qux>, JRef<Corge>)>,
...
}
此外,参考的分辨率也是样板。
我知道类型的直接反序列化不应依赖于某些外部状态,因此首先反序列化为 aJRef
然后再解析它们是有意义的。但是为了防止编写样板代码,稍后执行的解析可以使用自定义 proc-macro 执行,该宏派生原始类型的无 JRef 类型,它实现了接受外部函数并使用外部函数解析 URI 的特征。
到目前为止,我已经深入研究了依赖生态系统,以便只解决一个$ref
. 我真的需要做所有这些,还是我错过了一个更简单的解决方案?