summaryrefslogtreecommitdiff
path: root/ecs/src/util.rs
diff options
context:
space:
mode:
authorHampusM <hampus@hampusmat.com>2025-09-24 22:16:50 +0200
committerHampusM <hampus@hampusmat.com>2025-09-25 22:42:35 +0200
commitcbed21f5e6cfb449d49087cedc867c8e50721ba9 (patch)
tree3850ac5e7907a40e4c4e5627f547bd44c37896ce /ecs/src/util.rs
parent8d76fe6be211dfc8fc57d4e2f7e312e757ca899c (diff)
refactor(ecs): replace Pair ctor functions with builder
Diffstat (limited to 'ecs/src/util.rs')
-rw-r--r--ecs/src/util.rs61
1 files changed, 61 insertions, 0 deletions
diff --git a/ecs/src/util.rs b/ecs/src/util.rs
index 9ab4dc6..2ab78cd 100644
--- a/ecs/src/util.rs
+++ b/ecs/src/util.rs
@@ -300,6 +300,67 @@ macro_rules! gen_mask_64 {
pub(crate) use gen_mask_64;
+macro_rules! impl_multiple {
+ (
+ $type: ident,
+ ($(impl$(<$($generic: tt$(: $bound: ident)?),*>)? _<$($type_param: ty),*>),*)
+ ($($ty_param_matcher: ident),*) => {
+ $($item_tt: tt)*
+ }
+ ) => {
+ const _: () = {
+ $crate::util::impl_multiple!(
+ @(make_gen_item_macro)
+ _gen_multiple_impl_item,
+ ($($ty_param_matcher),*),
+ ($($item_tt)*)
+ );
+
+ $(
+ impl $(<$($generic$(: $bound)?,)*>)? $type<$($type_param),*>
+ {
+ _gen_multiple_impl_item!($($type_param),*);
+ }
+ )*
+ };
+ };
+
+ (
+ @(make_gen_item_macro)
+ $name: ident,
+ ($($ty_param_matcher: ident),*),
+ ($($transcriber: tt)*)
+ ) => {
+ $crate::util::impl_multiple!(
+ @(make_gen_item_macro)
+ ($), $name, ($($ty_param_matcher),*), ($($transcriber)*)
+ );
+ };
+
+ (
+ @(make_gen_item_macro)
+ ($dollar: tt),
+ $name: ident,
+ ($($ty_param_matcher: ident),*),
+ ($($transcriber: tt)*)
+ ) => {
+ $crate::util::impl_multiple!(
+ @(make_gen_item_macro)
+ $name, ($($dollar$ty_param_matcher: ty),*) => {
+ $($transcriber)*
+ }
+ );
+ };
+
+ (@(make_gen_item_macro) $name: ident, $($rule: tt)*) => {
+ macro_rules! $name {
+ $($rule)*
+ }
+ };
+}
+
+pub(crate) use impl_multiple;
+
mod sealed
{
pub trait Sealed {}