如何使用wasm-bindgen将Vec作为类型化数组返回?

问题描述

我有一个@import '/sweetalert2'; @import '~sweetalert2'; @import 'sweetalert2/dist'; ,我想返回并转换为带有wasm-bindgen的类型化数组,即将Vec转换为Vec<u32>。从我的研究看来,wasm-bindgen现在无法自行自动处理这些转换(就像Uint32Array一样),而必须使用js-sys板条箱。但是,我还没有找到使用此板条箱的方法的清晰示例。如果能提供一个清晰的简单示例来使用它,将不胜感激。

出于完整性考虑,如果答案能够解释如何公开返回String函数以及struct成员,那将是很好的,即,如何将这些定义转换为可以使用的东西:

Vec<u32>

解决方法

您可以将Vec<u32>转换为js_sys::Uint32Array。因此,您的my_func如下所示:

#[wasm_bindgen]
pub fn my_func() -> js_sys::Uint32Array {
    let rust_array = inner_func();
    return js_sys::Uint32Array::from(&rust_array[..]);
}

通过构造一个吸气剂即可暴露该结构:

#[wasm_bindgen]
pub struct my_struct {
    // Note: not pub
    my_vec: Vec<u32>,}

#[wasm_bindgen]
impl my_struct {
    #[wasm_bindgen(getter)]
    pub fn my_vec(&self) -> js_sys::Uint32Array {
        return js_sys::Uint32Array::from(&self.my_vec[..]);
    }
}