Я пытаюсь сериализовать следующий Result
объект, однако я получаю сообщение об ошибке, потому что, хотя он работает для некоторых свойств, он не работает на path
, хотя всезадействованные элементы имеют реализации, предоставленные Serde .
#[macro_use]
extern crate serde;
extern crate rocket;
use rocket_contrib::json::Json;
use std::rc::Rc;
#[derive(Serialize)]
struct Result {
success: bool,
path: Vec<Rc<GraphNode>>,
visited_count: u32,
}
struct GraphNode {
value: u32,
parent: Option<Rc<GraphNode>>,
}
fn main(){}
fn index() -> Json<Result> {
Json(Result {
success: true,
path: vec![],
visited_count: 1,
})
}
Playground , хотя я не могу заставить его тянуть в ящик Ракеты, он не должен быть однимиз 100 самых популярных.
error[E0277]: the trait bound `std::rc::Rc<GraphNode>: serde::Serialize` is not satisfied
--> src/main.rs:11:5
|
11 | path: Vec<Rc<GraphNode>>,
| ^^^^ the trait `serde::Serialize` is not implemented for `std::rc::Rc<GraphNode>`
|
= note: required because of the requirements on the impl of `serde::Serialize` for `std::vec::Vec<std::rc::Rc<GraphNode>>`
= note: required by `serde::ser::SerializeStruct::serialize_field`
Насколько я понимаю, #[derive(Serialize)]
должен автоматически создать метод сериализации, который затем может использовать serde.Однако я ожидаю, что это будет работать и для свойств.Нужно ли создавать структуры для всех типов, а затем выводить Serialize
для всех этих структур?
Нужно ли что-то делать для его включения?
Используются следующие ящики:
rocket = "*"
serde = { version = "1.0", features = ["derive"] }
rocket_contrib = "*"