Как мне вернуть Result с JsValue с wasm_bindgen? - PullRequest
0 голосов
/ 22 апреля 2019

Используя 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`

Вы можете увидеть полный пример на основе rust-parcel-template

Чтобы воспроизвести ошибку, изкорень репо, запустите npm run start или cd crate && cargo build

1 Ответ

1 голос
/ 23 апреля 2019

ответ был предоставлен в качестве комментария. 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)    

}
...