导入一个带有对象参数Rust/wasm_bindgen的js函数



我正在尝试使用wasm_bindgen的rust中的JS函数,该函数有一个类似于fetch:等函数的对象参数

#[wasm_bindgen]
extern "C" {
#[wasm_bindgen]
fn fetch(resource: &str, config: &JsValue);
}

(仅以提取为例,我知道有更好的方法可以使用从铁锈中提取…(

我不知道如何在rust中对配置对象进行建模。

我尝试使用JsValue,但似乎JsValue只能从基元类型创建,而不能从对象创建。

我在网上看到了一些serde可以在这里提供帮助的建议,但我找不到任何具体的例子,我自己尝试让它发挥作用也没有取得成效。

提前感谢您对此进行调查!

看起来您可以使用js_sys::Reflect访问或设置任意值,也可以使用serde解析/取消解析值

对于第一种方法,此资源解释了如何读取或写入非类型化对象的属性:https://rustwasm.github.io/docs/wasm-bindgen/reference/accessing-properties-of-untyped-js-values.html使用该接口的示例可以在web sys本身中找到,它定义了在为fetch()构建配置对象时使用的RequestInit对象:https://docs.rs/web-sys/0.3.50/src/web_sys/features/gen_RequestInit.rs.html#4

另一种方法是使用serde。有关此方面的示例,请访问https://rustwasm.github.io/docs/wasm-bindgen/examples/fetch.html更详细的解释可以在https://rustwasm.github.io/docs/wasm-bindgen/reference/arbitrary-data-with-serde.html

在定义了要序列化和反序列化的对象之后,JsValue::from_serde().into_serde()可以用于转换JsValue

同事指出的另一个选项是使用serde_wasm_bindgen,例如

#[derive(Serialize, Deserialize)]
struct FetchConfig {
pub method: String,
}
fn call_fetch() {
let config = FetchConfig {
method: "post".to_string()
};
let config = serde_wasm_bindgen::to_value(&config).unwrap();
fetch("https://example.com", &config);
}

相关内容

  • 没有找到相关文章

最新更新