【问题标题】:Rust: how to derive Deserialize for struct with generic types?Rust:如何为具有泛型类型的结构派生反序列化?
【发布时间】:2021-05-19 10:02:13
【问题描述】:
#[derive(Deserialize)]
struct S<'d, T>
  where T: Deserialize<'d>
{
  foo: T,
  other_field: String
}

以上代码编译失败,报未使用的生命周期参数, 但如果我删除它,Deserialize 将失去生命周期。

如果不使用幻像标记或DeserializeOwned,上述代码是否可以正确?

【问题讨论】:

    标签: rust lifetime serde serde-json


    【解决方案1】:

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

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

    对于 Rust,通常不在 struct/enum 声明中限制泛型类型。泛型类型仅限于需要行为的 impl 块。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-19
      • 1970-01-01
      • 1970-01-01
      • 2014-08-14
      • 1970-01-01
      • 2017-09-03
      • 2017-03-22
      • 2013-07-11
      相关资源
      最近更新 更多