feat: Added support for types with generics
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user