Rust说进口未使用,可以';无法同时找到导入的语句

Rust说进口未使用,可以';无法同时找到导入的语句,rust,Rust,我有一些我想使用Serde的结构。像这个: use serde::{Serialize, Deserialize}; #[derive(Serialize)] struct GetLinkResponse { error: String, link: String, } 但编译器说: 序列化未使用导入 无法找到序列化 错误:在此作用域中找不到派生宏'Serialize' -->src/structs.rs:3:10 | 3 |#[派生(序列化)] | ^^^

我有一些我想使用Serde的结构。像这个:

use serde::{Serialize, Deserialize};

#[derive(Serialize)]
struct GetLinkResponse {
    error: String,
    link: String,
}
但编译器说:

  • 序列化
    未使用导入
  • 无法找到序列化
  • 错误:在此作用域中找不到派生宏'Serialize'
    -->src/structs.rs:3:10
    |
    3 |#[派生(序列化)]
    |          ^^^^^^^^^
    警告:未使用的导入:`Deserialize`、`Serialize``
    -->src/structs.rs:1:13
    |
    1 |使用serde::{序列化,反序列化};
    |             ^^^^^^^^^  ^^^^^^^^^^^
    |
    =注意:`#[警告(未使用的_导入)]`默认打开
    
    我想我还不了解使用是如何工作的。有人能解释一下我的错误是什么吗?

    你是自动特征实现背后“魔法”的受害者,即过程宏。通常,人们给实现某个特征的过程宏起的名称与该特征相同(因为这很方便)。这里有trait
    serde::Serialize
    ,但也有过程宏自动实现该trait
    serde::Serialize

    它们并不冲突,因为它们生活在不同的名称空间中,编译器根据上下文推断它是宏还是特征

    在您的情况下,您忘记添加
    派生
    功能,因此serde中没有proc宏。因此,您正在导入一个trait而不使用它,并且尝试使用一个不存在的proc宏

    解决方案是使用:

    serde = { version = "1.0", features = ["derive"] }