为什么我得到 "Cannot Derive Macro In This Scope"?
Why Am I Getting "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:\skunkworks\rust\demo_err)
error: cannot find derive macro `Serialize` in this scope
--> src\main.rs:9:10
|
9 | #[derive(Serialize, Deserialize,Debug)]
| ^^^^^^^^^
error: cannot find derive macro `Deserialize` in this scope
--> src\main.rs:9:21
|
9 | #[derive(Serialize, Deserialize,Debug)]
| ^^^^^^^^^^^
现在我假设我做错了什么——除了 serde_json 中的这个 sample code。是这样的:
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
也不能修复错误。
显然我的代码和那个示例之间有些不同,但对于我来说,我无法弄清楚有什么不同。有人可以给我指出正确的方向吗?
您需要激活所需的功能才能使用派生宏。您可以通过更改 cargo.toml
中的 serde
声明来做到这一点:
serde = { version = "1.0.104", features = ["derive"] }
更多信息请关注:https://serde.rs/derive.html
另请参阅:
- How do I fix "cannot find 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:\skunkworks\rust\demo_err)
error: cannot find derive macro `Serialize` in this scope
--> src\main.rs:9:10
|
9 | #[derive(Serialize, Deserialize,Debug)]
| ^^^^^^^^^
error: cannot find derive macro `Deserialize` in this scope
--> src\main.rs:9:21
|
9 | #[derive(Serialize, Deserialize,Debug)]
| ^^^^^^^^^^^
现在我假设我做错了什么——除了 serde_json 中的这个 sample code。是这样的:
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
也不能修复错误。
显然我的代码和那个示例之间有些不同,但对于我来说,我无法弄清楚有什么不同。有人可以给我指出正确的方向吗?
您需要激活所需的功能才能使用派生宏。您可以通过更改 cargo.toml
中的 serde
声明来做到这一点:
serde = { version = "1.0.104", features = ["derive"] }
更多信息请关注:https://serde.rs/derive.html
另请参阅:
- How do I fix "cannot find derive macro in this scope"?