2

递归解析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. 我真的需要做所有这些,还是我错过了一个更简单的解决方案?

4

0 回答 0