2
我在函數中新分配了String
,我需要創建一個派生對象,它從String
中借用&str
,並返回給定的對象。如何使用將在函數結尾處刪除的字符串調用時返回serde_json :: from_str的結果?
我知道我的代碼是錯誤的,因爲String
生命週期是函數的生命週期,所以派生對象永遠不會因爲懸掛引用而返回。
這是什麼地方的習慣解決方案?我不能改變的serde_json::from_str
#[inline]
pub fn get_object<'a, T>(json_data: &'a Value, path: &[&str]) -> Option<T>
where T: serde::Deserialize<'a>
{
let mut pointer_str = String::new();
for entry in path.iter() {
pointer_str = format!("{}/{}", pointer_str, entry);
}
let child = json_data.pointer(&pointer_str).unwrap().to_string();
let result = serde_json::from_str(&child).ok();
return result;
}
簽名和錯誤:
error: `child` does not live long enough
--> src/lib.rs:88:40
|
88 | let result = serde_json::from_str(&child).ok();
| ^^^^^ does not live long enough
89 | return result;
90 | }
| - borrowed value only lives until here