如何使用wasm_bindgen返回带有JsValue的结果?

时间:2019-04-22 20:28:11

标签: rust wasm-bindgen

我将wasm_bindgenserde结合使用,我正在尝试使用惯用锈将一个复杂结构的JsValue返回。我创建了一个孤立的示例来说明我所看到的错误。

结构声明:

#[derive(Serialize)]
pub struct BookStoreData {
    pub h: HashMap<String, String>,
    pub name: String,
}

功能定义:

#[wasm_bindgen]
pub fn hello_hash(count: i32) -> Result<JsValue, JsValue> {
    set_panic_hook();
    let mut book_reviews = HashMap::new();

    book_reviews.insert(
        "Grimms' Fairy Tales".to_string(),
        "Masterpiece.".to_string(),
    );
    let data = BookStoreData {
        h: book_reviews,
        name: "My Book Store".to_string(),
    };

    let js_result: JsValue = JsValue::from_serde(&data).unwrap();

    OK(js_result)    

}

我收到此编译错误:

error[E0425]: cannot find function `OK` in this scope
  --> src/hello_whatever.rs:46:5
   |
46 |     OK(js_result)    
   |     ^^ help: a tuple variant with a similar name exists: `Ok`

您可以看到基于full examplerust-parcel-template

要重现该错误,请从存储库的根目录运行npm run startcd crate && cargo build

1 个答案:

答案 0 :(得分:1)

答案已作为评论提供。 Ok的拼写是小写的k

我对其进行了测试,以下是工作代码,但有一点改动:

#[wasm_bindgen]
pub fn hello_hash(count: i32) -> Result<JsValue, JsValue> {
    set_panic_hook();
    let mut book_reviews = HashMap::new();

    book_reviews.insert(
        "Grimms' Fairy Tales".to_string(),
        "Masterpiece.".to_string(),
    );
    let data = BookStoreData {
        h: book_reviews,
        name: "My Book Store".to_string(),
    };

    let js_result: JsValue = JsValue::from_serde(&data).unwrap();

    Ok(js_result)    

}