Failed attempt at rendering JSON for the rest view

I think something changed for rocket 0.5 becuase rustc is telling me:

```
the trait `Responder<'_, '_>` is not implemented for
  `rocket_contrib::json::Json<Person>`
```

Which I think doesn't make sense. It's their contrib wrapper over serde?
It's versioned ~.4 though so I think I need to bump that.
This commit is contained in:
Alex Wright 2021-07-11 15:14:40 +00:00
parent 591adcd000
commit e73a55cfeb
4 changed files with 756 additions and 183 deletions

917
Cargo.lock generated

File diff suppressed because it is too large Load Diff

View File

@ -9,3 +9,10 @@ edition = "2018"
juniper_rocket = "0.8.0" juniper_rocket = "0.8.0"
juniper = "0.15.7" juniper = "0.15.7"
rocket = "0.5.0-rc.1" rocket = "0.5.0-rc.1"
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
[dependencies.rocket_contrib]
version = "0.4.10"
default-features = false
features = ["json"]

View File

@ -1,7 +1,8 @@
use std::sync::{ atomic::AtomicUsize, atomic::Ordering, Mutex }; use std::sync::{ atomic::AtomicUsize, atomic::Ordering, Mutex };
use std::{ collections::HashMap }; use std::{ collections::HashMap };
use serde::{Deserialize, Serialize};
#[derive(Clone)] #[derive(Clone, Serialize, Deserialize)]
pub struct Person { pub struct Person {
id: String, id: String,
name: String, name: String,

View File

@ -1,12 +1,16 @@
use rocket::fairing::AdHoc; use rocket::fairing::AdHoc;
use rocket::State; use rocket::State;
use crate::model::Database; use rocket_contrib::json::Json;
use crate::model::{
Database,
Person,
};
#[rocket::get("/rest/<id>")] #[rocket::get("/rest/<id>", format = "json")]
fn get_rest(id: String, context: &State<Database>) -> Option<String> { fn get_rest(id: String, context: &State<Database>) -> Option<Json<Person>> {
match context.get_person(&id) { match context.get_person(&id) {
None => None, None => None,
Some(person) => Some(person.name().unwrap().to_string()) Some(person) => Some(Json(person))
} }
} }