diff options
author | HampusM <hampus@hampusmat.com> | 2025-09-24 22:16:50 +0200 |
---|---|---|
committer | HampusM <hampus@hampusmat.com> | 2025-09-25 22:42:35 +0200 |
commit | cbed21f5e6cfb449d49087cedc867c8e50721ba9 (patch) | |
tree | 3850ac5e7907a40e4c4e5627f547bd44c37896ce /ecs/src/util.rs | |
parent | 8d76fe6be211dfc8fc57d4e2f7e312e757ca899c (diff) |
refactor(ecs): replace Pair ctor functions with builder
Diffstat (limited to 'ecs/src/util.rs')
-rw-r--r-- | ecs/src/util.rs | 61 |
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 {} |