@@ -18,7 +18,7 @@ pub fn macro_derive(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
18
18
generate_opaque ( & input, struct_args)
19
19
} else {
20
20
// Go ahead and generate the code
21
- match generate_enum ( & input, struct_args) {
21
+ match generate ( & input, struct_args) {
22
22
//Ok(v) => {eprintln!("{}", v); v},
23
23
Ok ( v) => v,
24
24
Err ( v) => v,
@@ -30,7 +30,7 @@ pub fn macro_derive(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
30
30
generate_opaque ( & input, struct_args)
31
31
} else {
32
32
// Go ahead and generate the code
33
- match generate_enum ( & input, struct_args) {
33
+ match generate ( & input, struct_args) {
34
34
//Ok(v) => {eprintln!("{}", v); v},
35
35
Ok ( v) => v,
36
36
Err ( v) => v,
@@ -63,7 +63,7 @@ struct ParsedField {
63
63
field_args : args:: SerdeDiffFieldArgs ,
64
64
}
65
65
66
- fn generate_enum_fields_diff (
66
+ fn generate_fields_diff (
67
67
parsed_fields : & [ ParsedField ] ,
68
68
matching : bool ,
69
69
) -> proc_macro2:: TokenStream {
@@ -183,7 +183,7 @@ fn generate_arms(name: &syn::Ident, variant: Option<&syn::Ident>, fields: &syn::
183
183
let mut diff_match_arms = vec ! [ ] ;
184
184
let mut apply_match_arms = vec ! [ ] ;
185
185
let parsed_fields = ok_fields ( & fields) ?;
186
- let diffs = generate_enum_fields_diff (
186
+ let diffs = generate_fields_diff (
187
187
& parsed_fields,
188
188
matching,
189
189
) ;
@@ -292,7 +292,7 @@ fn generate_arms(name: &syn::Ident, variant: Option<&syn::Ident>, fields: &syn::
292
292
Ok ( ( diff_match_arms, apply_match_arms) )
293
293
}
294
294
295
- fn generate_enum (
295
+ fn generate (
296
296
input : & syn:: DeriveInput ,
297
297
struct_args : args:: SerdeDiffStructArgs ,
298
298
) -> Result < proc_macro:: TokenStream , proc_macro:: TokenStream > {
@@ -379,8 +379,10 @@ fn generate_enum(
379
379
380
380
// Generate the impl block with the diff and apply functions within it
381
381
let struct_name = & struct_args. ident ;
382
+ let generics = & struct_args. generics . params ;
383
+ let where_clause = & struct_args. generics . where_clause ;
382
384
let diff_impl = quote ! {
383
- impl serde_diff:: SerdeDiff for #struct_name {
385
+ impl <#generics> serde_diff:: SerdeDiff for #struct_name < #generics> #where_clause {
384
386
#diff_fn
385
387
#apply_fn
386
388
}
0 commit comments