Rust Lifetime, что я делаю не так?
Я пытаюсь написать функцию, которая принимает строку URL и вызывает другой сервис, который выдает JSON. Детали того, как этот вызов сделан, удалены в образце ниже.
я хочу иметь from_str()
заполнить экземпляр структуры T
с ответом. Если я в строке query
функция в main
тогда это компилируется.
Прости все unwraps()
но я хотел урезать код.
Что я делаю неправильно?
extern crate serde;
extern crate serde_json;
#[macro_use]
extern crate serde_derive;
use serde::de;
fn query_as_t<'a, T>(_url: &'a str) -> Result<T, serde_json::Error>
where
T: de::Deserialize<'a>,
{
// MAKE AN HTTP CALL TO URL AND GET JSON
let text: String = "JSON OBTAINED FROM HTTP CALL TO URL ABOVE".to_string();
// this is where the ds:Deserialize is required
serde_json::from_str(&text)
}
#[derive(Serialize, Deserialize)]
struct Foo {
a: String,
}
fn main() {
let _decoded: Foo = query_as_t("http://foo:123").unwrap();
}
error[E0597]: `text` does not live long enough
--> src/main.rs:15:27
|
15 | serde_json::from_str(&text)
| ^^^^ borrowed value does not live long enough
16 | }
| - borrowed value only lives until here
|
note: borrowed value must be valid for the lifetime 'a as defined on the function body at 8:1...
--> src/main.rs:8:1
|
8 | / fn query_as_t<'a, T>(_url: &'a str) -> Result<T, serde_json::Error>
9 | | where
10 | | T: de::Deserialize<'a> + 'a,
11 | | {
... |
15 | | serde_json::from_str(&text)
16 | | }
| |_^
Cargo.toml
[dependencies]
serde = "1.0"
serde_derive = "1.0"
serde_json = "1.0"