Как сериализовать контекст для Template :: render - PullRequest
0 голосов
/ 20 июня 2019

Я пытаюсь использовать руль с ракетой и дизелем.К сожалению, эта комбинация не сработала.

Сначала я создаю простой API отдыха с использованием этого урока .Затем я попытался протестировать шаблон руля без использования соединения с базой данных.Эта часть прекрасно работает.

Далее я попробовал тот же шаблон с использованием соединения с базой данных.Если я использую те же методы, что и в API для контекстной части шаблона, я получаю сообщения компилятора, которые я не понимаю.В случае, если REST API использует JSON из serde, я ожидал, что результат будет Serialize.

Неисправная функция:

#[get("/<id>")]
pub fn index(id: i32, connection: DbConn) -> Template
{
    let context = people::repository::index(id, &connection).map(|person| Json(person)).map_err(|error| error_status(error));
    Template::render("index", &context)
};

Структура:

#[derive(Queryable, AsChangeset, Serialize, Deserialize)]
#[table_name = "people"]
pub struct Person {
    pub id: i32,
    pub first_name: String,
    pub last_name: String,
    pub age: i32,
    pub profession: String,
    pub salary: i32,
};

Запрос к базе данных:

pub fn index(id: i32, connection: &PgConnection ) -> QueryResult<Person> {
    people::table.find(id).get_result::<Person>(connection)
}

Я ожидаю успешной компиляции.Сообщения об ошибках:

[E0277] the trait bound `rocket_contrib::json::Json<people::Person>: people::_IMPL_DESERIALIZE_FOR_Person::_serde::Serialize` is not satisfied. 
[Note] the trait `people::_IMPL_DESERIALIZE_FOR_Person::_serde::Serialize` is not implemented for `rocket_contrib::json::Json<people::Person>`
[E0277] the trait bound `rocket::http::Status: people::_IMPL_DESERIALIZE_FOR_Person::_serde::Serialize` is not satisfied. 
[Note] the trait `people::_IMPL_DESERIALIZE_FOR_Person::_serde::Serialize` is not implemented for `rocket::http::Status`
...