Rust 通过wasm-bindgen
crate 提供了出色的 WebAssembly 支持。使用这个 crate,您可以轻松地将 Rust 代码转换为 WebAssembly,从而轻松地在 Rust 和 JavaScript 之间来回传递数据。但是,该支持仅限于少数类型,包括布尔值、数字、字符、字符串和Vec
s。对于其他类型,例如structs
,您需要序列化数据并将其作为JsValue
返回。
通过 WebAssembly 在 Rust 和 JavaScript 之间来回传递数字数据是开箱即用的,但如果你想传递结构化数据,你需要先将其序列化。您需要三个包来完成此操作:
-
wasm_bindgen
是为 Rust 创建 WebAssembly 绑定的默认方式。 -
serde
是一个通用的序列化实用程序,您需要它来确保您的结构可以被序列化。 -
serde-wasm-bindgen
是与wasm-bindgen
一起使用的序列化逻辑。
以下是这些箱子在您的Cargo.toml
文件中的样子:
[ dependencies ] serde = { version = "1.0" , features = [ "derive" ] } serde-wasm-bindgen = "0.4" wasm-bindgen = { version = "0.2" , features = [ "serde-serialize" ] }
pub fn send_to_js () -> JsValue { const value = MyStruct { value : 42 }; serde_wasm_bindgen :: to_value ( & node) . unwrap () }
原文: https://humanwhocodes.com/blog/2023/01/return-structures-rust-javascript-webassembly/