导入带有对象参数的 js 函数 - Rust / wasm_bindgen
Importing a js function with an object parameter - Rust / wasm_bindgen
我正在尝试在 wasm_bindgen 中使用 rust 中的 JS 函数,该函数有一个类似于 fetch:
等函数的对象参数
#[wasm_bindgen]
extern "C" {
#[wasm_bindgen]
fn fetch(resource: &str, config: &JsValue);
}
(仅以fetch为例,我知道有更好的方法使用fetch from rust...)
我不确定如何在 Rust 中为配置对象建模。
我尝试使用 JsValue
,但似乎 JsValue
只能从原始类型创建,而不能从对象创建。
我在网上看到一些 serde 可以在这里提供帮助的建议,但我找不到任何具体示例,而且我自己尝试让它工作也没有成果。
提前感谢您对此的调查!
看起来您可以使用 js_sys::Reflect
来访问或设置任意值,或者您可以使用 serde 来获取 parse/unparse 值
对于第一种方法,此资源解释了如何在无类型对象上读取或写入 属性:https://rustwasm.github.io/docs/wasm-bindgen/reference/accessing-properties-of-untyped-js-values.html and an example of using this interface can be found in web-sys itself, which defines the RequestInit object which is used when building the config object for fetch()
: 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 and a more detailed explanation can be found at 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);
}
我正在尝试在 wasm_bindgen 中使用 rust 中的 JS 函数,该函数有一个类似于 fetch:
等函数的对象参数#[wasm_bindgen]
extern "C" {
#[wasm_bindgen]
fn fetch(resource: &str, config: &JsValue);
}
(仅以fetch为例,我知道有更好的方法使用fetch from rust...)
我不确定如何在 Rust 中为配置对象建模。
我尝试使用 JsValue
,但似乎 JsValue
只能从原始类型创建,而不能从对象创建。
我在网上看到一些 serde 可以在这里提供帮助的建议,但我找不到任何具体示例,而且我自己尝试让它工作也没有成果。
提前感谢您对此的调查!
看起来您可以使用 js_sys::Reflect
来访问或设置任意值,或者您可以使用 serde 来获取 parse/unparse 值
对于第一种方法,此资源解释了如何在无类型对象上读取或写入 属性:https://rustwasm.github.io/docs/wasm-bindgen/reference/accessing-properties-of-untyped-js-values.html and an example of using this interface can be found in web-sys itself, which defines the RequestInit object which is used when building the config object for fetch()
: 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 and a more detailed explanation can be found at 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);
}