为什么我会"Cannot Derive Macro In This Scope"?



针对以下代码尝试cargo build

#![allow(unused)]
use serde::{Deserialize, Serialize};
use serde_json::{Result, Value};
#[derive(Serialize, Deserialize,Debug)]
struct Repository{
r#type: String,
url: String,
}
fn main() {
println!("Hello, world!");
}

这是cargo.toml文件:

[package]
name = "demo_err"
version = "0.1.0"
authors = ["Onorio Catenacci <catenacci@ieee.org>"]
edition = "2018"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
serde = "1.0.104"
serde_json = "1.0.44"

当然,我的实际代码要大一点,但这是我可以重现错误的最小代码。

我得到以下错误:

Compiling demo_err v0.1.0 (U:skunkworksrustdemo_err)
error: cannot find derive macro `Serialize` in this scope
--> srcmain.rs:9:10
|
9 | #[derive(Serialize, Deserialize,Debug)]
|          ^^^^^^^^^
error: cannot find derive macro `Deserialize` in this scope
--> srcmain.rs:9:21
|
9 | #[derive(Serialize, Deserialize,Debug)]
|                     ^^^^^^^^^^^

现在我假设我做错了什么——除了这个来自serde_json的示例代码。它是这样的:

use serde::{Deserialize, Serialize};
use serde_json::Result;
#[derive(Serialize, Deserialize)]
struct Person {
name: String,
age: u8,
phones: Vec<String>,
}

现在,一个明显的区别是r#type,但使用不同的名称并不能修复错误。另一个明显的区别是serde_json::{Result, Value},但删除Value也不能修复错误。

很明显,我的代码和那个样本之间有些不同,但就我的一生而言,我无法弄清楚有什么不同。有人能给我指正确的方向吗?


编辑:

是的,我知道另一个问题是由相同的必需功能解决的。然而,在这种情况下显示的错误消息与在另一种情况中显示的错误不同。我不希望有人能够将两种不同的错误场景转换为同一个解决方案。请把这个打开。

具体如下:

错误:在此作用域中找不到派生宏Serialize

这是我想问的与相比的主要问题

警告:未使用的导入:DeserializeSerialize

这是另一个问题的要点。

您需要激活所需的功能才能使用派生宏。您可以通过更改cargo.toml:中的serde声明来完成此操作

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

欲了解更多信息,请点击:https://serde.rs/derive.html

另请参阅:

  • 如何修复";在此范围内找不到派生宏">

最新更新