diff --git a/crates/bevy_ecs/src/entity/visit_entities.rs b/crates/bevy_ecs/src/entity/visit_entities.rs index 127e65f679fa3..235dfb1680f4c 100644 --- a/crates/bevy_ecs/src/entity/visit_entities.rs +++ b/crates/bevy_ecs/src/entity/visit_entities.rs @@ -42,6 +42,24 @@ where /// /// It may be useful to implement directly for types that can't produce an /// iterator for lifetime reasons, such as those involving internal mutexes. +/// +/// This trait is derivable for structs via `#[derive(IterEntities)]`. Fields +/// not containing entities can be ignored with `#[iter_entities(ignore)]`. +/// +/// # Example +/// +/// ```rust +/// # use bevy_ecs::entity::{Entity, IterEntities}; +/// # use bevy_utils::hashbrown::HashSet; +/// #[derive(IterEntities)] +/// struct MyEntities { +/// lots: Vec, +/// one: Entity, +/// maybe: Option, +/// #[iter_entities(ignore)] +/// not_an_entity: String, +/// } +/// ``` pub trait IterEntities { /// Get an iterator over contained entities. fn iter_entities(&self) -> impl Iterator; diff --git a/crates/bevy_ecs/src/lib.rs b/crates/bevy_ecs/src/lib.rs index 3a5f409614a4c..a25263f5625f9 100644 --- a/crates/bevy_ecs/src/lib.rs +++ b/crates/bevy_ecs/src/lib.rs @@ -2053,7 +2053,8 @@ mod tests { #[derive(Component, IterEntities)] struct MyEntities { entities: Vec, - entities2: Vec, + another_one: Entity, + maybe_entity: Option, #[iter_entities(ignore)] something_else: String, } diff --git a/crates/bevy_hierarchy/src/components/children.rs b/crates/bevy_hierarchy/src/components/children.rs index cbd74a1e679e4..8dd6669e811e8 100644 --- a/crates/bevy_hierarchy/src/components/children.rs +++ b/crates/bevy_hierarchy/src/components/children.rs @@ -160,17 +160,3 @@ impl<'a> IntoIterator for &'a Children { self.0.iter() } } - -#[cfg(test)] -mod test { - use bevy_ecs::entity::VisitEntities; - - use super::*; - - fn assert_impls_map_entities() {} - - #[test] - fn children_impls_map_entities() { - assert_impls_map_entities::(); - } -} diff --git a/crates/bevy_window/src/window.rs b/crates/bevy_window/src/window.rs index f7fdf5d449bca..957c068d7edcb 100644 --- a/crates/bevy_window/src/window.rs +++ b/crates/bevy_window/src/window.rs @@ -1219,19 +1219,8 @@ pub struct ClosingWindow; #[cfg(test)] mod tests { - use bevy_ecs::entity::VisitEntities; - use super::*; - // Compile-time assertion that a type implements MapEntitiesMut - fn impl_map_entities() {} - - // Ensure that WidowRef implements MapEntitiesMut - #[test] - fn window_impls_map_entities() { - impl_map_entities::(); - } - // Checks that `Window::physical_cursor_position` returns the cursor position if it is within // the bounds of the window. #[test]