[英]Deserialize reqwest query error rustc(E0308)
不知道为什么会发生这种情况,这是一个片段:
结构:
use serde::Deserialize;
#[derive(Deserialize, Debug)]
pub struct Snapshot<'a> {
id : u32,
some_data : &'a str
}
impl<'a> SomeStruct{
async fn snapshot(url: &str) -> Result<Snapshot<'a>, Box<dyn std::error::Error>> {
let resp = reqwest::get(&url).await?;
let snapshot = resp.json::<Snapshot>().await?;
println!("{:?}", resp);
Ok(snapshot)
}
}
错误消息:在 json 行上
mismatched types
one type is more general than the other
note: expected trait `models::requests::_::_serde::Deserialize<'de>`
found trait `models::requests::_::_serde::Deserialize<'_>`rustc(E0308)
我想这与结构快照上元素的生命周期有关,但我不确定如何正确修复它。
货物.toml :
[dependencies]
actix-web = "3"
reqwest = { version = "0.11.6", features = ["json"] }
async-trait = "0.1.51"
serde = "1.0.130"
具体的问题是
resp.json::<Snapshot>()
省略了Snapshot
的生命周期,因此您不会反序列化为Snapshot<'a>
。
但即使你修复了这个问题,这也不起作用:你的反序列化snapshot
将借用resp
,它在snapshot
函数的末尾被删除,所以你不能返回反序列化snapshot
。 如果不了解周围的代码,我建议您将&'a str
更改为String
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.