2016-04-27 8 views
0

entlehnt Ich habe einen Endpunkt in Rust mit nickel.rs geschrieben:kann nicht leihen `* request` als wandelbar, weil es auch als unveränderlich

{ 
    let client = client.clone(); 
    let mongodb = MongoRepository::new(client,"rust-users".into()); 
    router.put("https://stackoverflow.com/users/:id",middleware!( |request ,mut response |{ 

     let id = try_with!(response,{request.param("id").ok_or((StatusCode::BadRequest, "Id parameter required")) }); 
     let user = try_with!(response,{request.json_as::<User>() 
        .map_err(|e| (StatusCode::BadRequest, format!("{}",e)))}); 
     let update_id = try_with!(response,{mongodb.update_by_id("users",id,user) 
        .map_err(|e| (StatusCode::InternalServerError, e))}); 
     ApiResult::Ok(StatusCode::Ok,update_id.to_json()) 

    })); 
} 

In dieser Zeile:

let id = try_with!(response,{request.param("id").ok_or((StatusCode::BadRequest, "Id parameter required")) }); 

request ist in einem unveränderlichen Zustand geliehen, aber in dieser Zeile:

let user = try_with!(response,{request.json_as::<User>() 
        .map_err(|e| (StatusCode::BadRequest, format!("{}",e)))}); 

Anfrage ist in einem veränderlichen sta ausgeliehen te. Dies führt zu den folgenden Fehler:

error: cannot borrow *request as mutable because it is also borrowed as immutable

Ich habe versucht, diesen Fehler zu beheben, indem Sie die id Linie in einem separaten Rahmen Einwickeln aber das Problem blieb.

Ich bin mir nicht sicher, wie sonst das Problem zu beheben. Gibt es noch etwas, das mit dem Code nicht stimmt?

Antwort

3

id ist vom Typ &str. Dies ist ein Zeiger auf die Variable request. Der Aufruf json_as nimmt als Parameter eine veränderbare Referenz auf die Variable request. Dies führt zu dem Fehler "*request kann nicht als veränderbar ausgeliehen werden, da es auch als unveränderbar ausgeliehen wird".

Es gibt eine Reihe von Möglichkeiten, wie Sie dies lösen können; wahrscheinlich am einfachsten ist die Verwendung to_owned(), um die &str in eine String zu konvertieren.

+0

Durch Versuch und Irrtum habe ich endlich meinen Fehler herausgefunden. Danke für die Antwort :) – menawi

Verwandte Themen