2015-04-14 45 views
2

根据documentation我可以通过调用status_mut()得到status的可变引用。不幸的是,处理函数,用于投放与超::服务器请求的签名包含不变Response,所以下面的代码给我一个错误:如何在超HTTP服务器处理程序中设置HTTP状态码?

pub fn handle_request(req: Request, res: Response<Fresh>){ 
    let status: &mut StatusCode = res.status_mut(); 
} 

error: cannot borrow immutable local variable `res` as mutable 

有什么办法来设置响应状态代码的请求处理程序,由hyper :: server :: Server使用?

UPD:最后我找到了这个例子。正确的在source code。 = *)

回答

3

拉斯特可变性是继承的,所以你可以标记为可变的,以获取参数的可变性:

pub fn handle_request(req: Request, mut res: Response<Fresh>){ 
    let status: &mut StatusCode = res.status_mut(); 
} 

这是可能的,因为这个函数接受Response<Fresh>的价值 - 如果它接受了它的参考:&Response<Fresh>,根本不可能修改它。

+0

谢谢。但还有另一个问题 - res bocme借用,当我调用status_mut()时,所以在此调用后我无法使用res。我只是尝试在处理程序中回答Response(StatusCode :: Forbidden,“Auth failed”)... – hoxnox

+1

你不想清楚你想做什么,但是当你想限制借用边界时有一个通用方法 - 采用在花括号中创建和使用借用的代码:'{let status = res.status_mut(); status.whatever(...); }/*这里res再次可用* /'。 –