Почему я получаю «Не удается извлечь макрос в этой области»? - PullRequest
0 голосов
/ 13 марта 2020

Попытка 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!");
}

А вот и машина go .toml file:

[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. Это так:

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 также не исправляет ошибку.

Очевидно, что что-то отличается между моим кодом и этим образцом, но я не могу понять, в чем дело. Может кто-нибудь, пожалуйста, укажите мне правильное направление?

1 Ответ

3 голосов
/ 15 марта 2020

Вам необходимо активировать необходимую функцию, чтобы использовать производные макросы. Вы можете сделать это, изменив объявление serde в cargo.toml:

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

Для получения дополнительной информации, пожалуйста, следуйте: https://serde.rs/derive.html

См. Также :

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...