如何在 Wasm (Rust) 中访问 JS 对象属性?

How to access JS object properties in Wasm (Rust)?

我正在使用 wasm bindgen,我有以下功能:

#[wasm_bindgen]
pub fn obj(o: &JsValue){
console::log_1(o);
}

在 js 中我称这个函数为 obj({name: "john"}); 它工作正常,但是当我尝试 console::log_1(o.name); 它给出错误 unknown field 指向 name

JsValue 没有字段 name。要获取此字段,您必须声明 JS 对象。

变体 1

将 serde 添加到您的依赖项中:

serde = "^1.0.101"
serde_derive = "^1.0.101"

防锈代码:

extern crate serde;

#[derive(Serialize, Deserialize)]
pub struct User {
    pub name: String,
}

#[wasm_bindgen]
pub fn obj(o: &JsValue){
    let user: User = o.into_serde().unwrap();
    console::log_1(user.name);
}

变体 2

另一种方法是直接使用wasm-bindgen,但我没用过。我认为它应该像这样工作:

#[wasm_bindgen]
pub struct User {
    pub name: String,
}

#[wasm_bindgen]
pub fn obj(o: User){
    console::log_1(o.name);
}