首页 > 解决方案 > Rust 说 import 没有被使用,同时找不到导入的语句

问题描述

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

use serde::{Serialize, Deserialize};

#[derive(Serialize)]
struct GetLinkResponse {
    error: String,
    link: String,
}

但是编译器说:

  1. Serialize未使用导入
  2. Serialize找不到
error: cannot find derive macro `Serialize` in this scope
 --> src/structs.rs:3:10
  |
3 | #[derive(Serialize)]
  |          ^^^^^^^^^

warning: unused imports: `Deserialize`, `Serialize`
 --> src/structs.rs:1:13
  |
1 | use serde::{Serialize, Deserialize};
  |             ^^^^^^^^^  ^^^^^^^^^^^
  |
  = note: `#[warn(unused_imports)]` on by default

我想我不了解use的工作原理。有人可以解释一下我的错误是什么吗?

标签: rust

解决方案


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

它们不会发生冲突,因为它们存在于不同的命名空间中,并且编译器会从上下文中推断它是宏还是特征。

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

解决方案是使用serde 的derive功能

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

推荐阅读