2015-04-14 62 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再次可用* /'。 –