问题描述
我正在使用serde和serde_json 1.0从base64字符串中解码数据:
I'm using serde and serde_json 1.0 to decode data from a base64 string:
fn from_base64_str<T: Deserialize>(string: &str) -> T {
let slice = decode_config(string, URL_SAFE).unwrap();
serde_json::from_slice(&slice).unwrap()
}
当我编译时,我得到了:
When I compile, I got this:
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
定义为:
Checking the serde doc, Deserialize
is defined as:
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中生命周期的最基本知识,所以我对trait Deserialize
中的'de
感到非常困惑.
I only know the very basics of lifetimes in Rust, so I'm very confused by the 'de
in trait Deserialize
.
如何解决此类功能中的生命周期错误?我正在使用Rust 1.18.0-nightly(452bf0852 2017-04-19)
How can I fix the lifetime error in such function? I'm using Rust 1.18.0-nightly (452bf0852 2017-04-19)
推荐答案
我从 Serde问题891 :我应该使用DeserializeOwned
而不是Deserialize
.
I found an answer from Serde issue 891: I should use DeserializeOwned
instead of Deserialize
.
这篇关于创建返回实现serde :: Deserialize的值的函数时,发生生命周期错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!