我正在尝试使用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);
}