首页 > 解决方案 > 找不到 DeserializeOwned 宏?

问题描述

Rustserde::de::DeserializeOwned在我的代码中找不到,但可以找到serde::Serialize. 我很确定它们都存在于 serde 1.0.104 中:

#[derive(serde::Serialize, serde::de::DeserializeOwned, Default, Debug)]
struct Outside {}

错误:

error[E0433]: failed to resolve: could not find `DeserializeOwned` in `de`
 --> src/lib.rs:3:39
  |
1 | #[derive(serde::Serialize, serde::de::DeserializeOwned, Default, Debug)]
  |                                       ^^^^^^^^^^^^^^^^ could not find `DeserializeOwned` in `de`

链接到操场

标签: rust

解决方案


特征的自动实现是通过过程宏完成的。如果你去serde::Deserialize文档页面,你会看到这句话:

此外,Serde 提供了一个过程宏,调用该宏serde_derive可以自动为程序Deserialize中的结构和枚举生成实现。

但是,没有serde::de::DeserializeOwned自动实现该特征的过程宏,这就是您的代码无法编译的原因。


要知道你能做什么,你可以阅读serde 文档:它解释了这DeserializeOwned是一种使用生命周期的奇特方式Deserialize。您只需添加#[derive(serde::Deserialize)]和使用DeserializeOwned.


推荐阅读