`* arg0` no vive lo suficiente - wasm_bindgen
Al ejecutar el siguiente código:
Cargo.toml
[lib]
crate-type = ["cdylib"]
[dependencies]
serde = { version = "1.0", features = ["derive"] }
wasm-bindgen = {version = "0.2.67", features = ["serde-serialize"] }
wasm-bindgen-futures = "0.4.17"
lib.rs
use serde::{Deserialize, Serialize};
use wasm_bindgen::prelude::*;
#[derive(Serialize, Deserialize)]
struct Output {
strings: Vec<String>,
}
#[wasm_bindgen] //error occuring here
pub async fn return_strings(_input: &str) -> JsValue {
//example function that returns a js value
let strings: Vec<String> = Default::default();
let output = Output { strings };
JsValue::from_serde(&output).unwrap()
}
Obtuve el siguiente error:
*arg0no vive lo suficiente
valor prestado no vive lo suficiente el argumento requiere que *arg0se preste para 'static
Si alguien pudiera decirme por qué, sería de gran ayuda.
Respuestas
El mensaje de error se produce cuando Rust asume que el futuro devuelto por return_stringstiene la misma vida útil que _inputaunque en realidad no lo toma prestado. Básicamente, la firma de la función sin azúcar se ve así:
pub fn return_strings<'a>(_input: &'a str) -> impl Future<Output = JsValue> + 'a;
El código generado quiere un futuro con 'staticvida útil, pero el futuro devuelto en realidad termina con la vida útil de una variable de cadena temporal.
Los desarrolladores son conscientes de esta limitación . Probablemente la solución más fácil sea tomar un argumento propio Stringo Box<str>en lugar de un préstamo &str.