找不到DeserializeOwned宏?

3
Rust在我的代码中找不到`serde::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`

链接到 Playground

(译注:此处为一个Rust代码链接,无法进行直接翻译。)
1个回答

6
自动实现 trait 是通过过程宏完成的。如果您进入 serde::Deserialize 文档页面,您会看到这句话:

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

然而,并没有过程宏可以自动实现 serde::de::DeserializeOwned trait,这就是为什么您的代码无法编译的原因。
要知道该怎么做,您可以阅读 serde 文档:它解释了 DeserializeOwned 是使用 Deserialize 以任何生命周期的一种花式方式。您只需添加 #[derive(serde::Deserialize)] 并使用 DeserializeOwned 即可。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接