Как исправить: не может определить подходящий срок для автоматического приведения

Мне снова удалось столкнуться с проблемой на всю жизнь, которую я, похоже, не смог решить самостоятельно.

Компилятор говорит мнене может вывести подходящее время жизни для автоматического принуждения

Я попытался следовать предложению компиляторов и ввел аннотации времени жизни в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 скомпилировать это.

Ответы на вопрос(1)

Ваш ответ на вопрос