Как построить автоответчик при использовании рамки Ракеты в ржавчине, не могу скомпилировать - PullRequest
0 голосов
/ 30 октября 2019

Я пытаюсь построить успокаивающий API в Rust с использованием фреймворка Rocket. Не удается скомпилировать с ошибкой о Responder:

#![feature(proc_macro_hygiene, decl_macro)]
#[macro_use] 
extern crate rocket;
#[macro_use] 
extern crate rocket_contrib;
#[macro_use] 
extern crate serde;

use serde::{Serialize, Deserialize};
use rocket::response::status;
use rocket::response::{self,Responder,Response};
use rocket::http::{Status, ContentType};
use rocket::request::Request;
use rocket_contrib::json::Json;


#[derive(Serialize)]
struct User {
    id : usize,
    name : String,
    age : i32,
    updated : i64,
}
// >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> help>>>>>>>>>
impl<'r, User: Responder<'r>> Responder<'r> for Json<User> {
    fn respond_to(self, req: &Request) -> Result<Response<'r>, Status> {
        Response::build()
            .header(ContentType::new("application", "json"))
            .ok()
    }
}


#[post("/user/<id>")]
fn addUser(id: usize) -> status::Accepted<String> {
    status::Accepted(Some(format!("id: '{}'", id)))
}

//fn getUser(id: usize) -> Json<User> {
#[get("/user/<id>")]
fn getUser(id: usize) -> Option<User> {

    User{
        id:id,
        name:"cowkeys".to_string(),
        age:19,
        updated:0
    }
    //Json(u)
}



fn main() {
    rocket::ignite().mount("/", routes![addUser,getUser]).launch();
}

Ошибка:

25 | impl<'r, User: Responder<'r>> Responder<'r> for Json<User> {
   |          ^^^^ type parameter `User` must be used as the type parameter for some local type

Как исправить эту ошибку?

...