@@ -1172,13 +1172,7 @@ fn deserialize_enum(
1172
1172
Some ( variant_idx) => {
1173
1173
let ( tagged, untagged) = variants. split_at ( variant_idx) ;
1174
1174
let tagged_frag = Expr ( deserialize_homogeneous_enum ( params, tagged, cattrs) ) ;
1175
- let tagged_frag = |deserializer| {
1176
- Some ( Expr ( quote_block ! {
1177
- let __deserializer = #deserializer;
1178
- #tagged_frag
1179
- } ) )
1180
- } ;
1181
- deserialize_untagged_enum_after ( params, untagged, cattrs, tagged_frag)
1175
+ deserialize_untagged_enum_after ( params, untagged, cattrs, Some ( tagged_frag) )
1182
1176
}
1183
1177
None => deserialize_homogeneous_enum ( params, variants, cattrs) ,
1184
1178
}
@@ -1689,17 +1683,16 @@ fn deserialize_untagged_enum(
1689
1683
variants : & [ Variant ] ,
1690
1684
cattrs : & attr:: Container ,
1691
1685
) -> Fragment {
1692
- deserialize_untagged_enum_after ( params, variants, cattrs, |_| None )
1686
+ let first_attempt = None ;
1687
+ deserialize_untagged_enum_after ( params, variants, cattrs, first_attempt)
1693
1688
}
1694
1689
1695
1690
fn deserialize_untagged_enum_after (
1696
1691
params : & Parameters ,
1697
1692
variants : & [ Variant ] ,
1698
1693
cattrs : & attr:: Container ,
1699
- first_attempt : impl FnOnce ( TokenStream ) -> Option < Expr > ,
1694
+ first_attempt : Option < Expr > ,
1700
1695
) -> Fragment {
1701
- let deserializer =
1702
- quote ! ( _serde:: __private:: de:: ContentRefDeserializer :: <__D:: Error >:: new( & __content) ) ;
1703
1696
let attempts = variants
1704
1697
. iter ( )
1705
1698
. filter ( |variant| !variant. attrs . skip_deserializing ( ) )
@@ -1708,12 +1701,10 @@ fn deserialize_untagged_enum_after(
1708
1701
params,
1709
1702
variant,
1710
1703
cattrs,
1711
- deserializer . clone ( ) ,
1704
+ quote ! ( __deserializer ) ,
1712
1705
) )
1713
1706
} ) ;
1714
- let attempts = first_attempt ( deserializer. clone ( ) )
1715
- . into_iter ( )
1716
- . chain ( attempts) ;
1707
+ let attempts = first_attempt. into_iter ( ) . chain ( attempts) ;
1717
1708
// TODO this message could be better by saving the errors from the failed
1718
1709
// attempts. The heuristic used by TOML was to count the number of fields
1719
1710
// processed before an error, and use the error that happened after the
@@ -1728,6 +1719,7 @@ fn deserialize_untagged_enum_after(
1728
1719
1729
1720
quote_block ! {
1730
1721
let __content = try!( <_serde:: __private:: de:: Content as _serde:: Deserialize >:: deserialize( __deserializer) ) ;
1722
+ let __deserializer = _serde:: __private:: de:: ContentRefDeserializer :: <__D:: Error >:: new( & __content) ;
1731
1723
1732
1724
#(
1733
1725
if let _serde:: __private:: Ok ( __ok) = #attempts {
0 commit comments