如何修复从 serde_json::from_slice 中“借用的值生存时间不够长”而不导致内存泄漏?

dop*_*umi 0 lifetime rust

考虑下面的代码:

pub async fn parse_bytes<'a, R: Deserialize<'a>>(_query: serde_json::Value) -> R {
    let result: Vec<u8> = vec![]; // fetch_result(&query).await

    serde_json::from_slice::<R>(result.as_slice())
        .expect("Can't parse bytes response")
}
Run Code Online (Sandbox Code Playgroud)

错误

它不编译:

`result` does not live long enough
borrowed value does not live long enough
Run Code Online (Sandbox Code Playgroud)

暂定方案

相反,提供result.leak()是有效的,但我不确定这是正确的解决方案:该方法的文档叙述:

此函数主要对于在程序的剩余生命周期中存在的数据有用。删除返回的引用将导致内存泄漏

一旦函数结束,返回的引用就会被删除。

问题

如何解决上述问题而不导致内存泄漏?

Spr*_*ite 5

DeserializeOwned代替使用。

use serde::de::DeserializeOwned;

pub async fn parse_bytes<R: DeserializeOwned>(_query: serde_json::Value) -> R {
    let result: Vec<u8> = vec![]; // fetch_result(&query).await

    serde_json::from_slice::<R>(result.as_slice())
        .expect("Can't parse bytes response")
}
Run Code Online (Sandbox Code Playgroud)