Не может заимствовать `*request` как изменяемый, потому что он также заимствован как неизменяемый
Я написал конечную точку в Rust, используя nickel.rs:
{
let client = client.clone();
let mongodb = MongoRepository::new(client, "rust-users".into());
router.put("/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())
}));
}
В этой строке:
let id = try_with!(response, {
request.param("id")
.ok_or((StatusCode::BadRequest, "Id parameter required"))
});
request
заимствовано в неизменном состоянии, но в этой строке:
let user = try_with!(response, {
request.json_as::<User>()
.map_err(|e|
(StatusCode::BadRequest, format!("{}",e))
)
});
запрос заимствован в изменчивом состоянии. Это вызывает следующую ошибку:
error: cannot borrow `*request` as mutable because it is also borrowed
as immutable
Я попытался исправить эту ошибку, обернув id
линии в отдельной области, но проблема сохраняется.
Я не уверен, как еще решить проблему. Что-то еще не так с кодом?
1 ответ
id
имеет тип &str
, Это указатель на переменную request
, призвание json_as
принимает в качестве параметра изменчивую ссылку на переменную request
, Это приводит к ошибке "не может заимствовать *request
как изменчивый, потому что он также заимствован как неизменный ".
Есть несколько способов решить эту проблему; вероятно, самым простым является использование to_owned()
преобразовать &str
в String
,