私は 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 のライフタイムについてごく基本的なことしか知らないので、'de
inについては非常に混乱していますtrait Deserialize
。
このような関数の有効期間エラーを修正するにはどうすればよいでしょうか?
ベストアンサー1
答えを見つけたセルデ第891号:DeserializeOwned
の代わりにを使用する必要がありますDeserialize
。