diff options
| author | HampusM <hampus@hampusmat.com> | 2026-06-09 17:36:17 +0200 |
|---|---|---|
| committer | HampusM <hampus@hampusmat.com> | 2026-06-09 17:36:17 +0200 |
| commit | ea95389b7fae4d75f3c8b6c465866834545ad5d9 (patch) | |
| tree | 572df17feb33c5efd27f7fac493a1351e8459e3e /engine-macros/src/reflection/field.rs | |
| parent | 62fe748a90efc35e9a5839b55b75a3db043102f1 (diff) | |
feat(engine): add offsets to reflection of enum variant fields
Diffstat (limited to 'engine-macros/src/reflection/field.rs')
| -rw-r--r-- | engine-macros/src/reflection/field.rs | 16 |
1 files changed, 4 insertions, 12 deletions
diff --git a/engine-macros/src/reflection/field.rs b/engine-macros/src/reflection/field.rs index 489d165..8572875 100644 --- a/engine-macros/src/reflection/field.rs +++ b/engine-macros/src/reflection/field.rs @@ -2,17 +2,17 @@ use quote::{quote, ToTokens}; use crate::reflection::visibility::generate as generate_visibility; -pub struct ReflectionFieldGenOptions +pub struct ReflectionFieldGenOptions<'a> { pub field_vis_override: Option<syn::Visibility>, - pub include_byte_offset: bool, + pub gen_get_byte_offset: &'a dyn Fn(&syn::Field) -> proc_macro2::TokenStream, } pub fn generate( field: &syn::Field, field_index: usize, engine_crate_path: &syn::Path, - options: ReflectionFieldGenOptions, + options: ReflectionFieldGenOptions<'_>, ) -> proc_macro2::TokenStream { let field_ident = &field.ident; @@ -27,15 +27,7 @@ pub fn generate( quote! { None } }; - let field_byte_offset = if options.include_byte_offset { - if let Some(field_ident) = field_ident { - quote! { Some(std::mem::offset_of!(Self, #field_ident)) } - } else { - quote! { Some(std::mem::offset_of!(Self, #field_index)) } - } - } else { - quote! { None } - }; + let field_byte_offset = (options.gen_get_byte_offset)(field); // since std::any::type_name as const is not stable yet let field_type_name = field_type.to_token_stream().to_string(); |
