From 8c98eea84f66f4510ea9ff33d68f83e8f754dc4d Mon Sep 17 00:00:00 2001 From: Scott Techau Date: Sat, 9 Mar 2024 12:21:17 -0800 Subject: [PATCH] Add `JsHashMap::entries` method --- src/js_collections.rs | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/src/js_collections.rs b/src/js_collections.rs index 8be65c58..c1d5ecab 100644 --- a/src/js_collections.rs +++ b/src/js_collections.rs @@ -59,6 +59,18 @@ where } } +impl JsHashMap +where + K: JsCollectionFromValue, + V: JsCollectionFromValue, +{ + pub fn entries(&self) -> impl Iterator { + let array = Object::entries(self.map.unchecked_ref()); + + OwnedArrayIter::new(array) + } +} + impl JsHashMap where K: JsCollectionIntoValue, @@ -307,3 +319,16 @@ impl JsCollectionFromValue for u8 { } } } + +impl JsCollectionFromValue for (K, V) +where + K: JsCollectionFromValue, + V: JsCollectionFromValue, +{ + fn from_value(val: JsValue) -> Self { + let val: &Array = val.dyn_ref().expect("expected tuple of length 2"); + let k = K::from_value(val.get(0)); + let v = V::from_value(val.get(1)); + (k, v) + } +}