summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHampusM <hampus@hampusmat.com>2026-07-05 01:04:56 +0200
committerHampusM <hampus@hampusmat.com>2026-07-05 01:04:56 +0200
commit02ee21f4571cda15d4bf0ee42128709cfab0485b (patch)
tree7778610c85acf9b5e8d495aa17319102ea47afca
parent9d2d0712511b1cc015e99cd448a3c52663a1da36 (diff)
feat(engine): add get_variant_reflection fn to enum reflection
-rw-r--r--engine-macros/src/reflection/enum_impl.rs12
-rw-r--r--engine-reflection/src/lib.rs2
2 files changed, 13 insertions, 1 deletions
diff --git a/engine-macros/src/reflection/enum_impl.rs b/engine-macros/src/reflection/enum_impl.rs
index baf1732..f46b977 100644
--- a/engine-macros/src/reflection/enum_impl.rs
+++ b/engine-macros/src/reflection/enum_impl.rs
@@ -166,7 +166,17 @@ fn generate_impls(
get_default_value: || {
#get_default_value_fn
},
- cast_dyn_any: |ptr| ptr.cast::<Self>()
+ cast_dyn_any: |ptr| ptr.cast::<Self>(),
+ get_variant_reflection: |target| {
+ use std::any::Any;
+ use #engine_crate_path::reflection::EnumReflectionExt;
+
+ let target = target.downcast_ref::<Self>()?;
+
+ Some(<Self as EnumReflectionExt>::get_variant_reflection(
+ target
+ ))
+ }
}
)
};
diff --git a/engine-reflection/src/lib.rs b/engine-reflection/src/lib.rs
index ce770e9..2b8d01a 100644
--- a/engine-reflection/src/lib.rs
+++ b/engine-reflection/src/lib.rs
@@ -141,6 +141,8 @@ pub struct Enum
pub get_default_value: fn() -> Option<DefaultValueFn>,
pub cast_dyn_any: CastDynAnyFn,
+
+ pub get_variant_reflection: fn(&dyn Any) -> Option<&'static EnumVariant>,
}
impl Enum