rust - Rust 说 import 没有被使用,同时找不到导入的语句
问题描述
我有一些我想使用 Serde 的结构。像这个:
use serde::{Serialize, Deserialize};
#[derive(Serialize)]
struct GetLinkResponse {
error: String,
link: String,
}
但是编译器说:
Serialize
未使用导入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的工作原理。有人可以解释一下我的错误是什么吗?
解决方案
你是自动特征实现背后的“魔法”的受害者,即过程宏。通常,人们给实现特征的过程宏赋予与特征相同的名称(因为它很方便)。这里有 trait serde::Serialize
,但也有自动实现该 trait 的过程宏serde::Serialize
。
它们不会发生冲突,因为它们存在于不同的命名空间中,并且编译器会从上下文中推断它是宏还是特征。
在您的情况下,您忘记添加该derive
功能,因此 serde 中没有 proc 宏。因此,您正在导入一个特征而不使用它,并且您尝试使用一个不存在的 proc 宏。
解决方案是使用serde 的derive
功能:
serde = { version = "1.0", features = ["derive"] }
推荐阅读
- node.js - 如何从函数中获取响应以通过 Node.js 中的函数返回
- flask - 无法在 Google Colab 中访问 Flask App URL 获取站点不可用
- database - 算法排序细节,但不排除
- c# - How does control flow when there is synchronous code in awaited function?
- c - 组装 - 排列生成问题
- netbeans - Netbeans GlassFish Server 6,部署,连接被拒绝:连接,Mac 上的错误错误
- ubuntu - pycharm 中的 pyglfw 不会在我的一个函数中定义窗口
- python - 同时安装和运行 32 位和 64 位 python - 模块问题
- c++ - 如何将输入流的前缀复制到 C++ 中的不同流?
- google-chrome - Chrome扩展content_script添加带有onchange函数的html,函数未定义