Rust:如何为具有泛型类型的结构派生反序列化?

Inc*_*ete 0 lifetime rust serde serde-json

#[derive(Deserialize)]
struct S<'d, T>
  where T: Deserialize<'d>
{
  foo: T,
  other_field: String
}
Run Code Online (Sandbox Code Playgroud)

上面的代码无法编译,抱怨未使用的生命周期参数,但如果我删除它,Deserialize就会丢失生命周期。

不使用幻像标记或 可以使上述代码正确吗DeserializeOwned

jon*_*sbb 6

如果完全删除该where子句,该代码将起作用。派生将T: Deserialize<'de>自动为派生Deserialize<'de>实现添加绑定。

#[derive(Deserialize)]
struct S<T> {
  foo: T,
  other_field: String
}
Run Code Online (Sandbox Code Playgroud)

对于 Rust,通常在结构/枚举声明中不限制泛型类型。通用类型仅限制用于impl需要行为的块。