繁体   English   中英

反序列化 reqwest 查询错误 rustc(E0308)

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM