@@ -82,7 +82,7 @@ pub(crate) fn derive_struct_diff_struct(struct_: &Struct) -> TokenStream {
8282 #[ cfg( feature = "generated_setters" ) ]
8383 let mut setters_body = String :: new ( ) ;
8484
85- let enum_name = String :: from ( "__" . to_owned ( ) + struct_. name . as_str ( ) + "StructDiffEnum" ) ;
85+ let enum_name = String :: from ( "__" . to_owned ( ) + struct_. name . as_ref ( ) . unwrap ( ) . as_str ( ) + "StructDiffEnum" ) ;
8686 let struct_generics_names_hash: HashSet < String > =
8787 struct_. generics . iter ( ) . map ( |x| x. full ( ) ) . collect ( ) ;
8888
@@ -619,7 +619,7 @@ pub(crate) fn derive_struct_diff_struct(struct_: &Struct) -> TokenStream {
619619 . map( |gen | Generic :: ident_with_const( gen ) )
620620 . collect:: <Vec <_>>( )
621621 . join( ", " ) ,
622- struct_. name. clone( ) ,
622+ struct_. name. clone( ) . unwrap_or_else ( || String :: from ( "Anonymous" ) ) ,
623623 struct_
624624 . generics
625625 . iter( )
@@ -689,7 +689,7 @@ pub(crate) fn derive_struct_diff_struct(struct_: &Struct) -> TokenStream {
689689 type_aliases = type_aliases,
690690 nanoserde_hack = nanoserde_hack,
691691 derives = derives,
692- struct_name = struct_. name,
692+ struct_name = struct_. name. as_ref ( ) . unwrap ( ) ,
693693 diff_body = diff_body,
694694 enum_name = enum_name,
695695 enum_body = diff_enum_body,
@@ -805,32 +805,31 @@ pub(crate) fn derive_struct_diff_enum(enum_: &Enum) -> TokenStream {
805805 . iter ( )
806806 . enumerate ( )
807807 . for_each ( |( _, field) | {
808- let field_name = & field. name ;
809- if let Some ( ty) = & field. ty {
810- used_generics. extend ( enum_. generics . iter ( ) . filter ( |x| x. full ( ) == ty. ident . path ( & ty, false ) ) ) ;
811-
812-
813- let to_add = enum_. generics . iter ( ) . filter ( |x| ty. wraps ( ) . iter ( ) . find ( |& wrapped_type| & x. full ( ) == wrapped_type ) . is_some ( ) ) ;
814- used_generics. extend ( to_add) ;
815-
816- used_generics. extend ( get_used_lifetimes ( & ty) . into_iter ( ) . filter_map ( |x| match struct_generics_names_hash. contains ( & x) {
817- true => Some ( enum_. generics . iter ( ) . find ( |generic| generic. full ( ) == x ) . unwrap ( ) ) ,
818- false => None ,
819- } ) ) ;
820-
821- for val in get_array_lens ( & ty) {
822- if let Some ( const_gen) = enum_. generics . iter ( ) . find ( |x| x. full ( ) == val) {
823- used_generics. push ( const_gen)
824- }
808+ let field_name = field. field_name . as_ref ( ) . unwrap ( ) ;
809+ let ty = & field. ty ;
810+ used_generics. extend ( enum_. generics . iter ( ) . filter ( |x| x. full ( ) == ty. ident . path ( & ty, false ) ) ) ;
811+
812+
813+ let to_add = enum_. generics . iter ( ) . filter ( |x| ty. wraps ( ) . iter ( ) . find ( |& wrapped_type| & x. full ( ) == wrapped_type ) . is_some ( ) ) ;
814+ used_generics. extend ( to_add) ;
815+
816+ used_generics. extend ( get_used_lifetimes ( & ty) . into_iter ( ) . filter_map ( |x| match struct_generics_names_hash. contains ( & x) {
817+ true => Some ( enum_. generics . iter ( ) . find ( |generic| generic. full ( ) == x ) . unwrap ( ) ) ,
818+ false => None ,
819+ } ) ) ;
820+
821+ for val in get_array_lens ( & ty) {
822+ if let Some ( const_gen) = enum_. generics . iter ( ) . find ( |x| x. full ( ) == val) {
823+ used_generics. push ( const_gen)
825824 }
826825 }
827- if let Some ( ty) = & field . ty {
826+ if ! matches ! ( ty. ident , Category :: None ) {
828827 match ( attrs_recurse ( & field. attributes ) , attrs_collection_type ( & field. attributes ) , ty. base ( ) == "Option" ) {
829828
830829 ( false , None , false ) => { // The default case
831830 l ! ( replace_enum_body, " {}({})," , field_name, ty. full( ) ) ;
832831
833- if matches ! ( ty. ident, Category :: UnNamed ) {
832+ if matches ! ( ty. ident, Category :: AnonymousStruct { .. } ) {
834833 l ! (
835834 apply_single_body,
836835 "variant @ Self::{}{{..}} => *self = variant," ,
@@ -866,13 +865,13 @@ pub(crate) fn derive_struct_diff_enum(enum_: &Enum) -> TokenStream {
866865
867866 l ! (
868867 apply_single_body,
869- "variant @ Self::{}(..) => *self = variant," ,
868+ "variant @ Self::{} => *self = variant," ,
870869 field_name
871870 ) ;
872871
873872 l ! (
874873 diff_body,
875- "variant @ Self::{}(..) => Self::Diff::Replace(variant)," ,
874+ "variant @ Self::{} => Self::Diff::Replace(variant)," ,
876875 field_name
877876 ) ;
878877 } ;
0 commit comments