summaryrefslogtreecommitdiff
path: root/engine-macros/src/reflection/enum_impl.rs
diff options
context:
space:
mode:
authorHampusM <hampus@hampusmat.com>2026-06-13 18:32:07 +0200
committerHampusM <hampus@hampusmat.com>2026-06-13 18:32:07 +0200
commit5cdb4b0adb55cf2995e999135c5f3e9d6da70843 (patch)
tree9a0fa0fc2f01546ac812061febd377262d097204 /engine-macros/src/reflection/enum_impl.rs
parent6107d9b8f6c02f4a0dbca081d7e028ec77f1c84b (diff)
feat(engine): add discriminant & fields layouts to enum reflectionHEADmaster
Diffstat (limited to 'engine-macros/src/reflection/enum_impl.rs')
-rw-r--r--engine-macros/src/reflection/enum_impl.rs24
1 files changed, 23 insertions, 1 deletions
diff --git a/engine-macros/src/reflection/enum_impl.rs b/engine-macros/src/reflection/enum_impl.rs
index a01ed8b..14142bf 100644
--- a/engine-macros/src/reflection/enum_impl.rs
+++ b/engine-macros/src/reflection/enum_impl.rs
@@ -218,6 +218,26 @@ pub fn generate(input: syn::ItemEnum) -> proc_macro2::TokenStream
&engine_crate_path,
);
+ let discriminant_layout = if is_unit_only {
+ quote! {
+ std::alloc::Layout::new::<Self>()
+ }
+ } else {
+ quote! {
+ std::alloc::Layout::new::<#mod_name::Discriminant>()
+ }
+ };
+
+ let fields_layout = if is_unit_only {
+ quote! {
+ None
+ }
+ } else {
+ quote! {
+ Some(std::alloc::Layout::new::<#mod_name::Fields>())
+ }
+ };
+
quote! {
#[doc(hidden)]
mod #mod_name {
@@ -232,7 +252,9 @@ pub fn generate(input: syn::ItemEnum) -> proc_macro2::TokenStream
#engine_crate_path::reflection::Type::Enum(
#engine_crate_path::reflection::Enum {
variants: &[#(#variants),*],
- is_unit_only: #is_unit_only
+ is_unit_only: #is_unit_only,
+ discriminant_layout: #discriminant_layout,
+ fields_layout: #fields_layout
}
)
};