私は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)
例:https://play.rust-lang.org/?gist=21175b41b1adcbf3a28c1f6affc74ccd&version=stable – coriolinus
は一緒にその例を置く答えを示唆しています: ' user_data'は、所有された 'UserData'オブジェクトではありません。 'Json'が 'T'に逆参照する' Json 'オブジェクトです。 'Json 'はそのコンストラクタのためだけに使われますが、コンパイラはそのことを知らないのです。今私はこれを解決する方法を理解する必要があります。私はそれを解決策として書きます。 –
coriolinus