不能将`* request`借用为可变因为它也被借用为不可变的

时间:2016-04-27 20:09:12

标签: rust nickel

我用Rust.rs编写了一个端点:

'\0'

在这一行:

{
    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 行包装在单独的范围内来解决此错误,但问题仍然存在。

我不确定如何解决这个问题。代码还有其他问题吗?

1 个答案:

答案 0 :(得分:3)

id的类型为&str。这是一个指向变量request的指针。调用json_as将变量request的可变引用作为参数。这导致错误&#34;无法借用*request作为可变因为它也被借用为不可变的&#34;。

有很多方法可以解决这个问题;可能最直接的方法是使用to_owned()&str转换为String