From acf1362b9a4dd70d93df8786b14c4b6b0aecc2cb Mon Sep 17 00:00:00 2001 From: Gauthier Acquitter <18447648+gakit@users.noreply.github.com> Date: Thu, 1 Jun 2023 12:12:57 +0200 Subject: [PATCH] bevy_reflect: Allow construction of MapIter outside of the bevy_reflect crate. (#8723) # Objective Right now it's impossible to construct a MapIter outside of the bevy_reflect crate, making it impossible to implement the Map trait for custom map types. ## Solution Addition of a pub constructor to MapIter. --- crates/bevy_reflect/src/impls/std.rs | 5 +---- crates/bevy_reflect/src/map.rs | 17 +++++++++++------ 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/crates/bevy_reflect/src/impls/std.rs b/crates/bevy_reflect/src/impls/std.rs index 77b2e8ad40717..e970b0f67de97 100644 --- a/crates/bevy_reflect/src/impls/std.rs +++ b/crates/bevy_reflect/src/impls/std.rs @@ -379,10 +379,7 @@ macro_rules! impl_reflect_for_hashmap { } fn iter(&self) -> MapIter { - MapIter { - map: self, - index: 0, - } + MapIter::new(self) } fn drain(self: Box) -> Vec<(Box, Box)> { diff --git a/crates/bevy_reflect/src/map.rs b/crates/bevy_reflect/src/map.rs index 6e997ffd32e26..d7ba2665fedec 100644 --- a/crates/bevy_reflect/src/map.rs +++ b/crates/bevy_reflect/src/map.rs @@ -245,10 +245,7 @@ impl Map for DynamicMap { } fn iter(&self) -> MapIter { - MapIter { - map: self, - index: 0, - } + MapIter::new(self) } fn get_at(&self, index: usize) -> Option<(&dyn Reflect, &dyn Reflect)> { @@ -377,8 +374,16 @@ impl Debug for DynamicMap { /// An iterator over the key-value pairs of a [`Map`]. pub struct MapIter<'a> { - pub(crate) map: &'a dyn Map, - pub(crate) index: usize, + map: &'a dyn Map, + index: usize, +} + +impl<'a> MapIter<'a> { + /// Creates a new [`MapIter`]. + #[inline] + pub const fn new(map: &'a dyn Map) -> MapIter { + MapIter { map, index: 0 } + } } impl<'a> Iterator for MapIter<'a> {