rmv_bevy_testing_tools/traits/
immediate_query.rs1use bevy_ecs::query::{QueryData, QueryFilter, QuerySingleError, ReadOnlyQueryData};
2
3use crate::prelude::TestApp;
4
5pub trait ImmediateQuery {
6 fn query_single<D>(&mut self) -> Result<<D as QueryData>::Item<'_>, QuerySingleError>
7 where
8 D: ReadOnlyQueryData;
9 fn query_single_filtered<D, F>(
10 &mut self,
11 ) -> Result<<D as QueryData>::Item<'_>, QuerySingleError>
12 where
13 D: ReadOnlyQueryData,
14 F: QueryFilter;
15 fn query_collect<D, C>(&mut self) -> C
16 where
17 D: ReadOnlyQueryData,
18 for<'a> C: std::iter::FromIterator<<D as QueryData>::Item<'a>>;
19 #[cfg(feature = "iter_tools")]
20 fn query_vec<D>(&mut self) -> Vec<<D as QueryData>::Item<'_>>
21 where
22 D: ReadOnlyQueryData;
23}
24
25impl ImmediateQuery for TestApp {
26 fn query_single<D>(&mut self) -> Result<<D as QueryData>::Item<'_>, QuerySingleError>
27 where
28 D: ReadOnlyQueryData,
29 {
30 let mut query = self.world_mut().query::<D>();
31 query.single(self.world_mut())
32 }
33 fn query_single_filtered<D, F>(
34 &mut self,
35 ) -> Result<<D as QueryData>::Item<'_>, QuerySingleError>
36 where
37 D: ReadOnlyQueryData,
38 F: QueryFilter,
39 {
40 let mut query = self.world_mut().query_filtered::<D, F>();
41 query.single(self.world_mut())
42 }
43 #[cfg(feature = "iter_tools")]
44 fn query_vec<D>(&mut self) -> Vec<<D as QueryData>::Item<'_>>
45 where
46 D: ReadOnlyQueryData,
47 {
48 use iter_tools::Itertools;
49
50 let mut query = self.world_mut().query::<D>();
51 query.iter(self.world_mut()).collect_vec()
52 }
53
54 fn query_collect<D, C>(&mut self) -> C
55 where
56 D: ReadOnlyQueryData,
57 for<'a> C: std::iter::FromIterator<<D as bevy_ecs::query::QueryData>::Item<'a>>,
58 {
59 let mut query = self.world_mut().query::<D>();
60 let result = query.iter(self.world_mut()).collect::<C>();
61 result
62 }
63}