@@ -771,19 +771,26 @@ fn read_fields_in_order(
771
771
let expecting = cattrs. expecting ( ) . unwrap_or ( & expecting) ;
772
772
773
773
let mut index_in_seq = 0_usize ;
774
- let let_values = vars. clone ( ) . zip ( fields) . map ( |( var, field) | {
775
- if field. attrs . skip_deserializing ( ) {
776
- let default = Expr ( expr_is_missing ( field, cattrs) ) ;
777
- quote ! {
778
- let #var = #default ;
779
- }
780
- } else {
774
+ let let_values = vars. clone ( ) . zip ( fields) . filter_map ( |( var, field) | {
775
+ if !field. attrs . skip_deserializing ( ) {
781
776
let read = read_field ( params, index_in_seq, field, cattrs, expecting) ;
782
777
index_in_seq += 1 ;
783
- quote ! {
778
+
779
+ return Some ( quote ! {
784
780
let #var = #read;
785
- }
781
+ } ) ;
782
+ }
783
+ None
784
+ } ) ;
785
+ let let_skipped = vars. clone ( ) . zip ( fields) . filter_map ( |( var, field) | {
786
+ if field. attrs . skip_deserializing ( ) {
787
+ let default = Expr ( expr_is_missing ( field, cattrs) ) ;
788
+
789
+ return Some ( quote ! {
790
+ let #var = #default ;
791
+ } ) ;
786
792
}
793
+ None
787
794
} ) ;
788
795
789
796
let mut result = if is_struct {
@@ -822,6 +829,7 @@ fn read_fields_in_order(
822
829
quote_block ! {
823
830
#let_default
824
831
#( #let_values) *
832
+ #( #let_skipped) *
825
833
_serde:: __private:: Ok ( #result)
826
834
}
827
835
}
@@ -883,15 +891,9 @@ fn read_fields_in_order_in_place(
883
891
let expecting = cattrs. expecting ( ) . unwrap_or ( & expecting) ;
884
892
885
893
let mut index_in_seq = 0usize ;
886
- let write_values = fields. iter ( ) . map ( |field| {
887
- let member = & field. member ;
888
-
889
- if field. attrs . skip_deserializing ( ) {
890
- let default = Expr ( expr_is_missing ( field, cattrs) ) ;
891
- quote ! {
892
- self . place. #member = #default ;
893
- }
894
- } else {
894
+ let write_values = fields. iter ( ) . filter_map ( |field| {
895
+ if !field. attrs . skip_deserializing ( ) {
896
+ let member = & field. member ;
895
897
let value_if_none = expr_is_missing_seq ( Some ( quote ! ( self . place. #member = ) ) , index_in_seq, field, cattrs, expecting) ;
896
898
let write = match field. attrs . deserialize_with ( ) {
897
899
None => {
@@ -919,8 +921,20 @@ fn read_fields_in_order_in_place(
919
921
}
920
922
} ;
921
923
index_in_seq += 1 ;
922
- write
924
+ return Some ( write) ;
923
925
}
926
+ None
927
+ } ) ;
928
+ let write_skipped = fields. iter ( ) . filter_map ( |field| {
929
+ if field. attrs . skip_deserializing ( ) {
930
+ let member = & field. member ;
931
+ let default = Expr ( expr_is_missing ( field, cattrs) ) ;
932
+
933
+ return Some ( quote ! {
934
+ self . place. #member = #default ;
935
+ } ) ;
936
+ }
937
+ None
924
938
} ) ;
925
939
926
940
let this_type = & params. this_type ;
@@ -942,6 +956,7 @@ fn read_fields_in_order_in_place(
942
956
quote_block ! {
943
957
#let_default
944
958
#( #write_values) *
959
+ #( #write_skipped) *
945
960
_serde:: __private:: Ok ( ( ) )
946
961
}
947
962
}
0 commit comments