我正在尝试将 Handlebars 与 Rocket 和 Diesel 一起使用。不幸的是,我没有让这种组合起作用。
首先,我使用本教程构建了一个简单的 rest-API 。然后我尝试在不使用数据库连接的情况下测试车把模板。这部分效果很好。
接下来,我尝试了使用数据库连接的相同模板。如果我对模板的上下文部分使用与 API 中相同的方法,我会得到我不理解的编译器消息。如果 REST API 使用来自 serde 的 JSON,我希望输出应该是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`