zengine_ecs 0.1.2

ZENgine's entity component system
Documentation
use super::{SystemParam, SystemParamFetch};
use crate::{
    query::{Query, QueryParameters, QueryRunner},
    World,
};

#[doc(hidden)]
pub struct QueryState<T: QueryParameters> {
    query_runner: QueryRunner<T>,
}

impl<T: QueryParameters> Default for QueryState<T> {
    fn default() -> Self {
        Self {
            query_runner: QueryRunner::default(),
        }
    }
}

impl<'a, T: QueryParameters> SystemParamFetch<'a> for QueryState<T> {
    type Item = Query<'a, T>;

    fn fetch(&mut self, world: &'a World) -> Self::Item {
        self.query_runner.run(world)
    }
}

impl<'a, T: QueryParameters> SystemParam for Query<'a, T> {
    type Fetch = QueryState<T>;
}