Rust说没有使用import,同时找不到import语句

bir*_*n04 14 rust

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

use serde::{Serialize, Deserialize};

#[derive(Serialize)]
struct GetLinkResponse {
    error: String,
    link: String,
}
Run Code Online (Sandbox Code Playgroud)

但编译器说:

  1. Serialize导入未使用
  2. Serialize找不到
use serde::{Serialize, Deserialize};

#[derive(Serialize)]
struct GetLinkResponse {
    error: String,
    link: String,
}
Run Code Online (Sandbox Code Playgroud)

我想我不明白use是如何工作的。有人可以解释一下我的错误是什么吗?

Fre*_*ios 35

您是自动特征实现(即程序宏)背后的“魔法”的受害者。通常,人们为实现特征的程序宏指定与该特征相同的名称(因为这样很方便)。这里有 Trait serde::Serialize,但也有自动实现该 Trait 的程序宏serde::Serialize

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

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

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

serde = { version = "1.0", features = ["derive"] }
Run Code Online (Sandbox Code Playgroud)

  • @TarasMatsyk是的,这通常是令人沮丧的根源,但你会习惯它,并且很快你就会明白问题的根源。 (3认同)
  • 天哪,这些功能正在扼杀我的生锈氛围:) (2认同)