Rust говорит, что импорт не используется и не может одновременно найти импортированные операторы - PullRequest
0 голосов
/ 07 февраля 2020

У меня есть структура, с которой я хочу использовать Serde. Как этот:

use serde::{Serialize, Deserialize};

#[derive(Serialize)]
struct GetLinkResponse {
    error: String,
    link: String,
}

Но компилятор говорит, что:

  1. Serialize импорт не используется
  2. Serialize не может быть найден
error: cannot find derive macro `Serialize` in this scope
 --> src/structs.rs:3:10
  |
3 | #[derive(Serialize)]
  |          ^^^^^^^^^

warning: unused imports: `Deserialize`, `Serialize`
 --> src/structs.rs:1:13
  |
1 | use serde::{Serialize, Deserialize};
  |             ^^^^^^^^^  ^^^^^^^^^^^
  |
  = note: `#[warn(unused_imports)]` on by default

Наверное, я не понимаю, как работает использование . Может кто-нибудь объяснить мне, в чем здесь моя ошибка?

1 Ответ

1 голос
/ 07 февраля 2020

Вы - жертва "волхвов c", стоящих за автоматизацией c реализации черты, т.е. процедурных макросов. Обычно люди дают процедурный макрос, который реализует черту с тем же именем, что и черта (потому что это удобно). Здесь есть черта serde::Serialize, но есть и процедурный макрос, который автоматически реализует эту черту serde::Serialize.

Они не конфликтуют, потому что живут в разных пространствах имен, а компилятор выводит из контекст, если это макрос или признак.

В вашей ситуации вы забыли добавить функцию derive, поэтому в serde нет макроса pro c. Таким образом, вы импортируете черту, не используя ее, и пытаетесь использовать несуществующий макрос pro c.

Решение состоит в том, чтобы использовать derive функцию *1013* serde :

serde = { version = "1.0", features = ["derive"] }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...