summaryrefslogtreecommitdiff
path: root/ecs/src/query/term.rs
diff options
context:
space:
mode:
Diffstat (limited to 'ecs/src/query/term.rs')
-rw-r--r--ecs/src/query/term.rs38
1 files changed, 38 insertions, 0 deletions
diff --git a/ecs/src/query/term.rs b/ecs/src/query/term.rs
new file mode 100644
index 0000000..7f24147
--- /dev/null
+++ b/ecs/src/query/term.rs
@@ -0,0 +1,38 @@
+use std::marker::PhantomData;
+
+use crate::component::Component;
+use crate::query::{TermWithoutField, TermsBuilder, TermsBuilderInterface};
+
+pub struct With<ComponentT>
+where
+ ComponentT: Component,
+{
+ _pd: PhantomData<ComponentT>,
+}
+
+impl<ComponentT> TermWithoutField for With<ComponentT>
+where
+ ComponentT: Component,
+{
+ fn apply_to_terms_builder(terms_builder: &mut TermsBuilder<'_>)
+ {
+ terms_builder.with::<ComponentT>();
+ }
+}
+
+pub struct Without<ComponentT>
+where
+ ComponentT: Component,
+{
+ _pd: PhantomData<ComponentT>,
+}
+
+impl<ComponentT> TermWithoutField for Without<ComponentT>
+where
+ ComponentT: Component,
+{
+ fn apply_to_terms_builder(terms_builder: &mut TermsBuilder<'_>)
+ {
+ terms_builder.without::<ComponentT>();
+ }
+}