我正在尝试为庞大的数据结构制作一个问答服务器。用户将 JSON 问题发送到服务器,服务器将使用庞大的数据结构来回答。
我试图通过hyper::server::Service
为我的Oracle
结构实现特征来做到这一点。
我有这样的事情:
use self::hyper::server::{Http, Service, Request, Response};
// ...other imports
struct Oracle { /* Tons of stuff */}
impl<'a> Service for &'a Oracle {
type Request = Request;
type Response = Response;
type Error = hyper::Error;
type Future = Box<Future<Item = Self::Response, Error = Self::Error>>;
fn call(&self, req: Request) -> Self::Future {
match (req.method(), req.path()) {
// could be lots of question types
(&hyper::Method::Post, "/query") => {
Box::new(req.body().concat2().map(|b| {
let query: Query = deserialize_req(&b.as_ref());
let ans = get_answer(&self, &query);
Response::new()
.with_header(ContentLength(ans.len() as u64))
.with_body(ans)
}))
},
_ => {
let response = Response::new()
.with_status(hyper::StatusCode::NotFound);
Box::new(futures::future::ok(response))
},
}
}
}
cannot infer an appropriate lifetime due to conflicting requirements
当我尝试投入&self
未来时,这会导致终身问题( )。
我的倾向是,这是解决这个问题的完全错误的方法,但我很难找出最好的方法来解决这个问题。