diff options
Diffstat (limited to 'engine-macros/src/reflection/enum_impl.rs')
| -rw-r--r-- | engine-macros/src/reflection/enum_impl.rs | 31 |
1 files changed, 27 insertions, 4 deletions
diff --git a/engine-macros/src/reflection/enum_impl.rs b/engine-macros/src/reflection/enum_impl.rs index b637d9f..14d91a7 100644 --- a/engine-macros/src/reflection/enum_impl.rs +++ b/engine-macros/src/reflection/enum_impl.rs @@ -352,24 +352,47 @@ fn generate_variants<'a>( Ok(()) }, + try_get_field: |target, field_index| { { + #![allow(unreachable_code)] + + use std::any::Any; + use #engine_crate_path::reflection::GetError; + + let target = target + .downcast_ref::<Self>() + .ok_or(GetError::WrongTargetType)?; + + let #variant_pattern = target else { + return Err(GetError::WrongTargetEnumVariant); + }; + + let field: &dyn Any = match field_index { + #field_index_match_arms + _ => { + return Err(GetError::IndexOutOfBounds); + } + }; + + Ok(field) + } }, try_get_field_mut: |target, field_index| { { #![allow(unreachable_code)] use std::any::Any; - use #engine_crate_path::reflection::EnumVariantGetFieldError; + use #engine_crate_path::reflection::GetError; let target = target .downcast_mut::<Self>() - .ok_or(EnumVariantGetFieldError::WrongTargetType)?; + .ok_or(GetError::WrongTargetType)?; let #variant_pattern = target else { - return Err(EnumVariantGetFieldError::WrongTargetVariant); + return Err(GetError::WrongTargetEnumVariant); }; let field: &mut dyn Any = match field_index { #field_index_match_arms _ => { - return Err(EnumVariantGetFieldError::FieldIndexOutOfBounds); + return Err(GetError::IndexOutOfBounds); } }; |
