Руст не может найти имена? - PullRequest
0 голосов
/ 06 февраля 2020

Rust не может найти serde::de::DeserializeOwned в моем коде, но может найти serde::Serialize. Я почти уверен, что они оба существуют в serde 1.0.104, хотя:

#[derive(serde::Serialize, serde::de::DeserializeOwned, Default, Debug)]
struct Outside {}

Ошибка:

error[E0433]: failed to resolve: could not find `DeserializeOwned` in `de`
 --> src/lib.rs:3:39
  |
1 | #[derive(serde::Serialize, serde::de::DeserializeOwned, Default, Debug)]
  |                                       ^^^^^^^^^^^^^^^^ could not find `DeserializeOwned` in `de`

Ссылка на игровую площадку

1 Ответ

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

Автоматическая реализация черты c осуществляется через процедурный макрос. Если вы go перейдете на serde::Deserialize страницу документации , вы увидите следующее предложение:

Кроме того, Serde предоставляет процедурный макрос с именем serde_derive для автоматической генерации Deserialize реализации для структур и перечислений в вашей программе.

Однако процедурного макроса для автоматической реализации черты serde::de::DeserializeOwned не существует, поэтому ваш код не может компилироваться.


Чтобы узнать, что вы можете сделать, вы можете прочитать документацию serde : в ней объясняется, что DeserializeOwned - это модный способ использования Deserialize независимо от времени жизни. Вам просто нужно добавить #[derive(serde::Deserialize)] и использовать DeserializeOwned.

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