我的代码:
fn request_add<T>(request: &mut Request, collection_name: &'static str) -> Fallible<Fallible<String>>
where
T: serde::Serialize + serde::de::DeserializeOwned,
{
let add_dao = dao::MongoDao::new(collection_name);
let obj = serde_json::from_reader::<Body, T>(request.body)?; //cannot move out of borrowed content
Ok(add_dao.add(&obj))
}
Run Code Online (Sandbox Code Playgroud)
我有一个cannot move out of borrowed content错误,因为request是一个参考,但为什么不serde_json::from_reader使用mut引用?为什么需要所有权?我该如何解决?
She*_*ter 14
因为它是API指南:
通用读/写器功能采取
R: Read和W: Write由值(C-RW-VALUE)标准库包含以下两个impl:
Run Code Online (Sandbox Code Playgroud)impl<'a, R: Read + ?Sized> Read for &'a mut R { /* ... */ } impl<'a, W: Write + ?Sized> Write for &'a mut W { /* ... */ }这意味着如果需要,可以使用引用调用任何按值接受
R: Read或W: Write通用参数的函数mut.
您可以打电话Read::by_ref或自己参考:
serde_json::from_reader(&mut request.body)
Run Code Online (Sandbox Code Playgroud)
serde_json::from_reader(request.body.by_ref())
Run Code Online (Sandbox Code Playgroud)
也可以看看: