相关疑难解决方法(0)

创建返回实现serde :: Deserialize的值的函数时的生命周期错误

我正在使用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()
}
Run Code Online (Sandbox Code Playgroud)

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

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

检查serde doc,Deserialize定义为:

pub trait Deserialize<'de>: Sized {
Run Code Online (Sandbox Code Playgroud)

所以我添加了生命周期:

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()
}
Run Code Online (Sandbox Code Playgroud)

然后编译器告诉我:

error: `slice` does not live long enough
  --> src/main.rs:11:29
   |
11 |     serde_json::from_slice(&slice).unwrap()
   |                             ^^^^^ does …
Run Code Online (Sandbox Code Playgroud)

lifetime rust serde serde-json

12
推荐指数
2
解决办法
1420
查看次数

标签 统计

lifetime ×1

rust ×1

serde ×1

serde-json ×1