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

问题描述 投票:0回答:1
#[derive(Deserialize)]
struct S<'d, T>
  where T: Deserialize<'d>
{
  foo: T,
  other_field: String
}

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

Deserialize
就会失去生命周期。

不使用幻影标记或

DeserializeOwned
,上述代码是否可以正确?

rust lifetime serde serde-json
1个回答
7
投票

如果您完全删除

where
子句,则代码可以正常工作。派生将为派生的
T: Deserialize<'de>
实现自动添加
Deserialize<'de>
绑定。

#[derive(Deserialize)]
struct S<T> {
  foo: T,
  other_field: String
}

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

impl
块。

© www.soinside.com 2019 - 2024. All rights reserved.