rust 为什么我得到“无法在此范围内派生宏”?

pgky5nke  于 2023-11-19  发布在  其他
关注(0)|答案(1)|浏览(178)

尝试对以下代码执行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 <[email protected]>"]
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的这个示例代码。它是这样的:

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
这是另一个问题的重点。

d8tt03nd

d8tt03nd1#

您需要激活所需的功能才能使用派生宏。您可以通过更改cargo.toml中的serde声明来实现这一点:

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

字符串
或者通过cargo命令:

cargo add serde --features derive


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

参见:

相关问题