summaryrefslogtreecommitdiff
path: root/engine-macros/src/reflection/options_attr.rs
diff options
context:
space:
mode:
authorHampusM <hampus@hampusmat.com>2026-06-17 19:41:11 +0200
committerHampusM <hampus@hampusmat.com>2026-06-17 19:41:11 +0200
commit8848cd0732a7656a2e0913e63d224618082f21df (patch)
treeb4d49de70254840224099279a48c679f0c88012e /engine-macros/src/reflection/options_attr.rs
parentf82a35702cb85da7ace298960024b773a2da6d85 (diff)
feat(engine-macros): improve flexibility of Reflection macro on generic typesHEADmaster
Diffstat (limited to 'engine-macros/src/reflection/options_attr.rs')
-rw-r--r--engine-macros/src/reflection/options_attr.rs37
1 files changed, 37 insertions, 0 deletions
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<syn::AngleBracketedGenericArguments, syn::Token![,]>,
+}
+
+impl syn::parse::Parse for OptionsAttr
+{
+ fn parse(input: syn::parse::ParseStream) -> syn::Result<Self>
+ {
+ let params =
+ input.parse_terminated(|param| param.parse::<syn::Meta>(), 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 })
+ }
+}