如何在超 HTTP 服务器处理程序中设置 HTTP 状态代码?

How can I set HTTP status code in hyper HTTP Server handler?

根据 documentation,我可以通过调用 status_mut() 获得对 status 的可变引用。不幸的是,用于处理 hyper::Server 请求的处理程序函数的签名包含不可变的 Response,因此以下代码给我一个错误:

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 中。 =*)

Rust 中的可变性是继承的,因此您只需将参数标记为可变即可获得可变性:

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

这是可能的,因为此函数按值接受 Response<Fresh> - 如果它按引用接受它:&Response<Fresh>,则根本不可能修改它。