summaryrefslogtreecommitdiff
path: root/engine-macros/src/reflection/field.rs
diff options
context:
space:
mode:
authorHampusM <hampus@hampusmat.com>2026-06-09 17:36:17 +0200
committerHampusM <hampus@hampusmat.com>2026-06-09 17:36:17 +0200
commitea95389b7fae4d75f3c8b6c465866834545ad5d9 (patch)
tree572df17feb33c5efd27f7fac493a1351e8459e3e /engine-macros/src/reflection/field.rs
parent62fe748a90efc35e9a5839b55b75a3db043102f1 (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.rs16
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();