递归解析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>)>,
...
}
此外,参考分辨率也是样板。
我知道类型的直接反序列化不应该依赖于某些外部状态,因此首先将反序列化为JRef
,然后再解决它们是有意义的。但是为了避免编写样板代码,可以使用自定义proc-macro来执行稍后执行的解析,该宏可以派生原始类型的无JRef类型,该宏实现接受外部函数并使用该外部函数解析URI的特征。
到目前为止,我已经深入研究了依赖项生态系统,以便仅解决单个$ref
。我真的需要做所有这些事情吗,还是我错过了一个更简单的解决方案?