Как исправить: не может определить подходящий срок для автоматического приведения
Мне снова удалось столкнуться с проблемой на всю жизнь, которую я, похоже, не смог решить самостоятельно.
Компилятор говорит мнене может вывести подходящее время жизни для автоматического принуждения
Я попытался следовать предложению компиляторов и ввел аннотации времени жизни вhandle_request
метод.
fn handle_request<'a>(&self, req: &Request, res: &'a mut ResponseWriter) {
fn set_headers(req: &Request, res: &mut ResponseWriter) {
//probably not important for the example
}
match &req.request_uri {
&AbsolutePath(ref url) => {
match self.router.match_route(req.method.clone(), url.clone()) {
Some(route_result) => {
set_headers(req, res);
let floor_req = request::Request{
origin: req,
params: route_result.params.clone()
};
let floor_res = response::Response{
origin: res
};
(route_result.route.handler)(floor_req, &mut floor_res);
},
None => {}
}
},
_ => set_headers(req, res)
}
}
У меня был код, работавший раньше, но теперь я хотел обернутьhttp::server::ResponseWriter
в моем собственномResponse
структура. Я сделал то же самое дляRequest
раньше, но с точки зрения продолжительности жизни дело кажется немного другим. Может быть, потому что это&mut
вместо простого&
ссылка.
Это моеResponseWriter
структура.
use http;
///A container for the response
pub struct Response<'a> {
///the original `http::server::ResponseWriter`
pub origin: &'a mut http::server::ResponseWriter<'a>,
}
Просто если самаритянин захочет скомпилировать код локально, я поместил его вlifetime_crazyness филиал здесь:https://github.com/cburgdorf/Floor/commits/lifetime_craziness
Просто бегиmake floor
скомпилировать это.