Rust说进口未使用,可以';无法同时找到导入的语句
我有一些我想使用Serde的结构。像这个:Rust说进口未使用,可以';无法同时找到导入的语句,rust,Rust,我有一些我想使用Serde的结构。像这个: use serde::{Serialize, Deserialize}; #[derive(Serialize)] struct GetLinkResponse { error: String, link: String, } 但编译器说: 序列化未使用导入 无法找到序列化 错误:在此作用域中找不到派生宏'Serialize' -->src/structs.rs:3:10 | 3 |#[派生(序列化)] | ^^^
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::{序列化,反序列化};
| ^^^^^^^^^ ^^^^^^^^^^^
|
=注意:`#[警告(未使用的_导入)]`默认打开
我想我还不了解使用是如何工作的。有人能解释一下我的错误是什么吗?你是自动特征实现背后“魔法”的受害者,即过程宏。通常,人们给实现某个特征的过程宏起的名称与该特征相同(因为这很方便)。这里有traitserde::Serialize
,但也有过程宏自动实现该traitserde::Serialize
它们并不冲突,因为它们生活在不同的名称空间中,编译器根据上下文推断它是宏还是特征
在您的情况下,您忘记添加派生
功能,因此serde中没有proc宏。因此,您正在导入一个trait而不使用它,并且尝试使用一个不存在的proc宏
解决方案是使用:
serde = { version = "1.0", features = ["derive"] }