`* arg0` não vive o suficiente - wasm_bindgen
Ao executar o seguinte 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()
}
Eu obtenho o seguinte erro:
*arg0não vive o suficiente o
valor emprestado não vive o suficiente o suficiente requer que *arg0seja emprestado para 'static
Se alguém pudesse me dizer o motivo, eu seria uma grande ajuda.
Respostas
A mensagem de erro é gerada quando Rust assume que o futuro retornado por return_stringstem o mesmo tempo de vida, _inputembora não seja realmente emprestado dele. Basicamente, a assinatura da função sem açúcar se parece com:
pub fn return_strings<'a>(_input: &'a str) -> impl Future<Output = JsValue> + 'a;
O código gerado deseja um futuro com 'staticvida útil, mas o futuro retornado na verdade termina com a vida útil de uma variável de string temporária.
Os desenvolvedores estão cientes dessa limitação . Provavelmente, a solução mais fácil é pegar uma propriedade Stringou Box<str>argumento em vez de um emprestado &str.