rmv_bevy_testing_tools/traits/
immediate_query.rs

1use 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}