diff options
Diffstat (limited to 'engine-macros/src/reflection/enum_impl.rs')
| -rw-r--r-- | engine-macros/src/reflection/enum_impl.rs | 19 |
1 files changed, 15 insertions, 4 deletions
diff --git a/engine-macros/src/reflection/enum_impl.rs b/engine-macros/src/reflection/enum_impl.rs index 1cc8f0a..4e27c2b 100644 --- a/engine-macros/src/reflection/enum_impl.rs +++ b/engine-macros/src/reflection/enum_impl.rs @@ -110,15 +110,26 @@ fn generate_impls( #get_default_value_fn }, cast_dyn_any: |ptr| ptr.cast::<Self>(), - get_variant_reflection: |target| { + get_variant_index: |target| { use std::any::Any; + use #engine_crate_path::reflection::Reflection; use #engine_crate_path::reflection::EnumReflectionExt; let target = target.downcast_ref::<Self>()?; - Some(<Self as EnumReflectionExt>::get_variant_reflection( - target - )) + let enum_reflection = unsafe { + <Self as Reflection>::TYPE_REFLECTION + .as_enum() + .unwrap_unchecked() + }; + + Some(enum_reflection.variants + .element_offset( + match target { + #(#variant_lookup_match_arms),* + } + ) + .unwrap()) } } ) |
