簡體   English   中英

如何使用 wasm-bindgen 將 Vec 作為類型化數組返回?

[英]How can a Vec be returned as a typed array with wasm-bindgen?

我有一個Vec我想返回並轉換為帶有 wasm-bindgen 的類型化數組,即將Vec<u32> Uint32Array Vec<u32>轉換為Uint32Array 從我的研究來看,wasm-bindgen 現在無法自行處理自動轉換這些內容(就像它對String所做的那樣),而您必須使用js-sys板條箱。 但是,我還沒有找到有關如何使用此板條箱的明確示例。 如果可以提供如何使用它的清晰簡單示例,將不勝感激。

為了完整起見,如果答案可以解釋如何公開返回Vec<u32>的函數以及結構成員,即,如何將這些定義轉換為可以工作的內容,那就太好了:

#[wasm_bindgen]
pub fn my_func() -> Vec<u32> {
    inner_func() // returns Vec<u32>
}

#[wasm_bindgen]
pub struct my_struct {
    #[wasm_bindgen(readonly)]
    pub my_vec: Vec<u32>,
}

您可以將Vec<u32> 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[..]);
}

並且可以通過創建 getter 來公開結構:

#[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[..]);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM