Exported struct Whatever Rust Types

T parameter&T parameter&mut T parameterT return valueOption<T> parameterOption<T> return valueJavaScript representation
YesYesYesYesYesYesInstances of a wasm-bindgen-generated JavaScript class Whatever { ... }

Note: Public fields implementing Copy have automatically generated getters/setters. To generate getters/setters for non-Copy public fields, use #[wasm_bindgen(getter_with_clone)] for the struct or implement getters/setters manually.

Example Rust Usage

#![allow(unused)] fn main() { use wasm_bindgen::prelude::*; #[wasm_bindgen] pub struct ExportedNamedStruct { // pub value: String, // This won't work. See working example below. pub inner: u32, } #[wasm_bindgen(getter_with_clone)] pub struct ExportedNamedStructNonCopy { pub non_copy_value: String, pub copy_value: u32, } #[wasm_bindgen] pub fn named_struct_by_value(x: ExportedNamedStruct) {} #[wasm_bindgen] pub fn named_struct_by_shared_ref(x: &ExportedNamedStruct) {} #[wasm_bindgen] pub fn named_struct_by_exclusive_ref(x: &mut ExportedNamedStruct) {} #[wasm_bindgen] pub fn return_named_struct(inner: u32) -> ExportedNamedStruct { ExportedNamedStruct { inner } } #[wasm_bindgen] pub fn named_struct_by_optional_value(x: Option<ExportedNamedStruct>) {} #[wasm_bindgen] pub fn return_optional_named_struct(inner: u32) -> Option<ExportedNamedStruct> { Some(ExportedNamedStruct { inner }) } #[wasm_bindgen] pub struct ExportedTupleStruct(pub u32, pub u32); #[wasm_bindgen] pub fn return_tuple_struct(x: u32, y: u32) -> ExportedTupleStruct { ExportedTupleStruct(x, y) } }

Example JavaScript Usage

import { ExportedNamedStruct, named_struct_by_value, named_struct_by_shared_ref, named_struct_by_exclusive_ref, return_named_struct, named_struct_by_optional_value, return_optional_named_struct, ExportedTupleStruct, return_tuple_struct } from './guide_supported_types_examples'; let namedStruct = return_named_struct(42); console.log(namedStruct instanceof ExportedNamedStruct); // true console.log(namedStruct.inner); // 42 named_struct_by_shared_ref(namedStruct); named_struct_by_exclusive_ref(namedStruct); named_struct_by_value(namedStruct); let optionalNamedStruct = return_optional_named_struct(42); named_struct_by_optional_value(optionalNamedStruct); let tupleStruct = return_tuple_struct(10, 20); console.log(tupleStruct instanceof ExportedTupleStruct); // true console.log(tupleStruct[0], tupleStruct[1]); // 10, 20