From 8848cd0732a7656a2e0913e63d224618082f21df Mon Sep 17 00:00:00 2001 From: HampusM Date: Wed, 17 Jun 2026 19:41:11 +0200 Subject: feat(engine-macros): improve flexibility of Reflection macro on generic types --- engine-macros/src/reflection/options_attr.rs | 37 ++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 engine-macros/src/reflection/options_attr.rs (limited to 'engine-macros/src/reflection/options_attr.rs') diff --git a/engine-macros/src/reflection/options_attr.rs b/engine-macros/src/reflection/options_attr.rs new file mode 100644 index 0000000..231b969 --- /dev/null +++ b/engine-macros/src/reflection/options_attr.rs @@ -0,0 +1,37 @@ +#[derive(Debug, Default)] +pub struct OptionsAttr +{ + pub impl_with_generics: + syn::punctuated::Punctuated, +} + +impl syn::parse::Parse for OptionsAttr +{ + fn parse(input: syn::parse::ParseStream) -> syn::Result + { + let params = + input.parse_terminated(|param| param.parse::(), syn::Token![,])?; + + let mut impl_with_generics = syn::punctuated::Punctuated::new(); + + for param in params { + let param = param.require_list()?; + + if !param.path.is_ident("impl_with_generics") { + return Err(syn::Error::new_spanned( + param, + "Unrecognized attribute parameter", + )); + } + + impl_with_generics = param.parse_args_with( + syn::punctuated::Punctuated::< + syn::AngleBracketedGenericArguments, + syn::Token![,], + >::parse_terminated, + )?; + } + + Ok(Self { impl_with_generics }) + } +} -- cgit v1.2.3-18-g5258