From 3f099cddf16f2e7e002cc24217ed3cc5da422156 Mon Sep 17 00:00:00 2001 From: HampusM Date: Sun, 7 Jun 2026 00:41:15 +0200 Subject: feat(engine-ecs): add component reflection support --- engine-ecs-macros/src/lib.rs | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) (limited to 'engine-ecs-macros/src/lib.rs') diff --git a/engine-ecs-macros/src/lib.rs b/engine-ecs-macros/src/lib.rs index 3eb02dd..a304706 100644 --- a/engine-ecs-macros/src/lib.rs +++ b/engine-ecs-macros/src/lib.rs @@ -98,6 +98,46 @@ pub fn component_derive(input: TokenStream) -> TokenStream *#id_var_ident } + fn type_reflection() -> Option<&'static #ecs_path::reflection::Type> + { + struct SpecializationTarget(std::marker::PhantomData); + + trait HasReflection + { + fn type_reflection(&self) + -> Option<&'static #ecs_path::reflection::Type>; + } + + trait NoReflection + { + fn type_reflection(&self) + -> Option<&'static #ecs_path::reflection::Type>; + } + + impl NoReflection for &SpecializationTarget + { + fn type_reflection(&self) + -> Option<&'static #ecs_path::reflection::Type> + { + None + } + } + + impl HasReflection for SpecializationTarget + where + T: #ecs_path::reflection::Reflection + { + fn type_reflection(&self) + -> Option<&'static #ecs_path::reflection::Type> + { + Some(T::type_reflection()) + } + } + + (&SpecializationTarget::(std::marker::PhantomData)) + .type_reflection() + } + fn name(&self) -> &'static str { std::any::type_name::() -- cgit v1.2.3-18-g5258