zengine_ecs/system/system_parameter/
query_parameter.rs

1use super::{SystemParam, SystemParamFetch};
2use crate::{
3    query::{Query, QueryParameters, QueryRunner},
4    World,
5};
6
7#[doc(hidden)]
8pub struct QueryState<T: QueryParameters> {
9    query_runner: QueryRunner<T>,
10}
11
12impl<T: QueryParameters> Default for QueryState<T> {
13    fn default() -> Self {
14        Self {
15            query_runner: QueryRunner::default(),
16        }
17    }
18}
19
20impl<'a, T: QueryParameters> SystemParamFetch<'a> for QueryState<T> {
21    type Item = Query<'a, T>;
22
23    fn fetch(&mut self, world: &'a World) -> Self::Item {
24        self.query_runner.run(world)
25    }
26}
27
28impl<'a, T: QueryParameters> SystemParam for Query<'a, T> {
29    type Fetch = QueryState<T>;
30}