diff --git a/crates/js-sys/src/lib.rs b/crates/js-sys/src/lib.rs index 61eca1717a5..bc8acc99c3e 100644 --- a/crates/js-sys/src/lib.rs +++ b/crates/js-sys/src/lib.rs @@ -4884,6 +4884,14 @@ macro_rules! arrays { /// input values from a specified array. #[wasm_bindgen(method)] pub fn set(this: &$name, src: &JsValue, offset: u32); + + /// Gets the value at `idx`, equivalent to the javascript `my_var = arr[idx]`. + #[wasm_bindgen(method, structural, indexing_getter)] + pub fn get_index(this: &$name, idx: u32) -> $ty; + + /// Sets the value at `idx`, equivalent to the javascript `arr[idx] = value`. + #[wasm_bindgen(method, structural, indexing_setter)] + pub fn set_index(this: &$name, idx: u32, value: $ty); } impl $name { diff --git a/crates/js-sys/tests/wasm/TypedArray.rs b/crates/js-sys/tests/wasm/TypedArray.rs index fc7cc3c9ef1..a30457e5fe9 100644 --- a/crates/js-sys/tests/wasm/TypedArray.rs +++ b/crates/js-sys/tests/wasm/TypedArray.rs @@ -89,6 +89,19 @@ fn new_fill() { each!(test_fill); } +macro_rules! test_get_set { + ($arr:ident) => {{ + let arr = $arr::new(&1.into()); + assert_eq!(arr.get_index(0) as f64, 0 as f64); + arr.set_index(0, 1 as _); + assert_eq!(arr.get_index(0) as f64, 1 as f64); + }}; +} +#[wasm_bindgen_test] +fn new_get_set() { + each!(test_get_set); +} + macro_rules! test_slice { ($arr:ident) => {{ let arr = $arr::new(&4.into());