我想为我的Responder
结构实现Hero
特性,但是要使用以下方法签名(respond_to
):
use rocket::{http::Status, response::Responder, Request, Response};
use serde::{Deserialize, Serialize};
#[derive(Serialize, Deserialize)]
pub struct Hero {
pub id: Option<i32>,
pub name: String,
pub identity: String,
pub hometown: String,
pub age: i32,
}
impl Hero {
pub fn new(
num: Option<i32>,
name: String,
identity: String,
hometown: String,
age: i32,
) -> Hero {
Hero {
id: num,
name,
identity,
hometown,
age,
}
}
}
impl<'r> Responder<'r> for Hero {
fn respond_to(self, _request: &Request) -> Result<Response, Status> {
unimplemented!()
}
}
引发编译错误:
error[E0106]: missing lifetime specifier
--> src/main.rs:32:55
|
32 | fn respond_to(self, _request: &Request) -> Result<Response, Status> {
| ^^^^^^^^ expected lifetime parameter
|
= help: this function's return type contains a borrowed value, but the signature does not say which one of `_request`'s 2 lifetimes it is borrowed from
依赖项:
[dependencies]
rocket = "0.4.2"
serde = {version = "1.0.99", features=["derive"]}
文档没有提供如何在返回类型时提供生存期的示例。返回类型时如何指定生存期?
答案 0 :(得分:2)
Responder
特征定义为:
pub trait Responder<'r> {
fn respond_to(self, request: &Request) -> response::Result<'r>;
}
response::Result<'r>
定义为:
pub type Result<'r> = ::std::result::Result<self::Response<'r>, ::http::Status>;
您的方法签名是:
fn respond_to(self, request: &Request) -> Result<Response, Status>;
如您所见,您只是忘记为Response
指定生存期。正确的方法签名是:
impl<'r> Responder<'r> for Hero {
fn respond_to(self, request: &Request) -> Result<Response<'r>, Status> {
unimplemented!()
}
}