From c79f7883c099f1624f9666fb8691ffc5022c1bf5 Mon Sep 17 00:00:00 2001 From: HampusM Date: Tue, 16 Jun 2026 19:07:36 +0200 Subject: feat(engine): add default value retrieval to type reflection --- engine-macros/src/reflection/default_value.rs | 42 +++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 engine-macros/src/reflection/default_value.rs (limited to 'engine-macros/src/reflection/default_value.rs') diff --git a/engine-macros/src/reflection/default_value.rs b/engine-macros/src/reflection/default_value.rs new file mode 100644 index 0000000..567c3b1 --- /dev/null +++ b/engine-macros/src/reflection/default_value.rs @@ -0,0 +1,42 @@ +use quote::quote; + +pub fn gen_get_default_value_fn( + type_ident: &proc_macro2::Ident, + type_generics: &syn::TypeGenerics, +) -> proc_macro2::TokenStream +{ + quote! { + struct SpecializationTarget(std::marker::PhantomData); + + trait HasDefaultValue + { + fn default_value_fn(&self) -> Option Box>; + } + + trait NoDefaultValue + { + fn default_value_fn(&self) -> Option Box>; + } + + impl NoDefaultValue for &SpecializationTarget + { + fn default_value_fn(&self) -> Option Box> + { + None + } + } + + impl HasDefaultValue for SpecializationTarget + where + T: std::default::Default + 'static + { + fn default_value_fn(&self) -> Option Box> + { + Some(|| Box::new(T::default())) + } + } + + (&SpecializationTarget::<#type_ident #type_generics>(std::marker::PhantomData)) + .default_value_fn() + } +} -- cgit v1.2.3-18-g5258