gpt4 book ai didi

rust - 函数返回 serde 反序列化类型时如何修复生命周期错误?

转载 作者:行者123 更新时间:2023-11-29 08:20:24 25 4
gpt4 key购买 nike

我正在使用 serde 和 serde_json 1.0 从 base64 字符串中解码数据:

fn from_base64_str<T: Deserialize>(string: &str) -> T {
let slice = decode_config(string, URL_SAFE).unwrap();
serde_json::from_slice(&slice).unwrap()
}

当我编译时,我得到了这个:

error[E0106]: missing lifetime specifier
--> src/main.rs:6:23
|
6 | fn from_base64_str<T: Deserialize>(string: &str) -> T {
| ^^^^^^^^^^^ expected lifetime parameter

查看 serde 文档,Deserialize 定义为:

pub trait Deserialize<'de>: Sized {

所以我添加了生命周期:

fn from_base64_str<'de, T: Deserialize<'de>>(string: &str) -> T {
let slice = decode_config(string, URL_SAFE).unwrap();
serde_json::from_slice(&slice).unwrap()
}

然后编译器告诉我:

error: `slice` does not live long enough
--> src/main.rs:11:29
|
11 | serde_json::from_slice(&slice).unwrap()
| ^^^^^ does not live long enough
12 | }
| - borrowed value only lives until here
|
note: borrowed value must be valid for the lifetime 'de as defined on the body at 9:64...
--> src/main.rs:9:65
|
9 | fn from_base64_str<'de, T: Deserialize<'de>>(string: &str) -> T {
| _________________________________________________________________^ starting here...
10 | | let slice = decode_config(string, URL_SAFE).unwrap();
11 | | serde_json::from_slice(&slice).unwrap()
12 | | }
| |_^ ...ending here

我正在使用 Rust 1.18.0-nightly (452bf0852 2017-04-19)。我只知道 Rust 中生命周期的基础知识,所以我对 trait Deserialize 中的 'de 感到非常困惑。

如何修复此类函数中的生命周期错误?

最佳答案

我从Serde issue 891找到了答案: 我应该使用 DeserializeOwned 而不是 Deserialize

关于rust - 函数返回 serde 反序列化类型时如何修复生命周期错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52667354/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com