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

fil*_*ora 3 rust webassembly wasm-bindgen

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

#[wasm_bindgen]
pub fn obj(o: &JsValue){
console::log_1(o);
}
Run Code Online (Sandbox Code Playgroud)

在 js 中我调用这个函数obj({name: "john"}); 并且它工作正常,但是当我尝试时它给出了指向的console::log_1(o.name); 错误unknown fieldname

Mic*_*ael 5

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

变体1

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

serde = "^1.0.101"
serde_derive = "^1.0.101"
Run Code Online (Sandbox Code Playgroud)

铁锈代码:

serde = "^1.0.101"
serde_derive = "^1.0.101"
Run Code Online (Sandbox Code Playgroud)

变体2

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

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);
}
Run Code Online (Sandbox Code Playgroud)