feat: Added support for types with generics

This commit is contained in:
2025-10-10 02:31:56 +02:00
parent 396938a089
commit 513b36afdb

View File

@@ -353,6 +353,8 @@ fn typed_inner(ast: DeriveInput) -> syn::Result<TokenStream2> {
let name = ast.ident;
let mut as_name = LitStr::new(&name.to_string(), name.span());
let generics = &ast.generics;
let mut case = None;
let mut tag = None;
for attr in &ast.attrs {
@@ -412,9 +414,19 @@ fn typed_inner(ast: DeriveInput) -> syn::Result<TokenStream2> {
));
}
let generics_name: TokenStream2 = generics
.type_params()
.map(|ty| {
let ident = &ty.ident;
quote! {
+ &#ident::type_name()
}
})
.collect();
let type_name_fn = quote! {
fn type_name() -> ::std::string::String {
#as_name.to_string()
#as_name.to_string() #generics_name
}
};
@@ -432,8 +444,10 @@ fn typed_inner(ast: DeriveInput) -> syn::Result<TokenStream2> {
}
};
let (impl_generics, ty_generics, where_clause) = generics.split_for_impl();
Ok(quote! {
impl ::lua_typed::Typed for #name {
impl #impl_generics ::lua_typed::Typed for #name #ty_generics #where_clause {
#type_name_fn
#definitions