我将wasm_bindgen
与serde
结合使用,我正在尝试使用惯用锈将一个复杂结构的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 example的rust-parcel-template
要重现该错误,请从存储库的根目录运行npm run start
或cd crate && cargo build
答案 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)
}