我正在使用 Rust 和 Rocket 构建 REST API。我有一个端点,用于创建新用户,定义如下:
/// View with which to create a user
#[post("/users", format = "application/json", data = "<user_data>")]
fn create_user(user_data: Json<UserData>, db: DB) -> Status<Json<Value>> {
let conn = db.conn();
let _new_user_result = user_data.into_new_user(&conn);
unimplemented!()
}
请注意,这里没有借用的内容;
user_data
和 db
都是拥有它们的。尽管如此,在编译时我会收到以下错误:error[E0507]: cannot move out of borrowed content
--> src/views/user_account.rs:75:28
|
75 | let _new_user_result = user_data.into_new_user(&conn);
| ^^^^^^^^^ cannot move out of borrowed content
作为参考,into_new_user
函数的函数签名如下:
fn into_new_user(self, conn: &SqliteConnection) -> Result<NewUser, Status<Json<Value>>> {
...
}
这里出了什么问题?如果我借用了什么东西,这个错误就好理解多了,但是考虑到所有相关的东西都是我的,我感到十分困惑。
$ rustc --version; cargo --version
rustc 1.22.0-nightly (a47c9f870 2017-10-11)
cargo 0.23.0-nightly (e447ac7e9 2017-09-27)