我正在使用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的生存期的最基本知识,所以我对'de中的trait Deserialize感到非常困惑。

如何解决此类功能中的生命周期错误?我正在使用Rust 1.18.0-nightly(452bf0852 2017-04-19)

最佳答案

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

关于rust - 创建返回实现serde::Deserialize的值的函数时,发生生命周期错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52667354/

10-13 04:46