@@ -876,17 +876,16 @@ mod msgpack {
876
876
Fields :: Unit => {
877
877
quote ! {
878
878
// https://doc.rust-lang.org/beta/unstable-book/language-features/try-blocks.html (2016 -_-)
879
- let mut r_copied = r . clone ( ) ;
879
+ let mut r_try = * r ;
880
880
let mut try_unit = || -> Result <( ) , #tarantool_crate:: msgpack:: DecodeError > {
881
- let ( ) = #tarantool_crate:: msgpack:: Decode :: decode( r , context)
881
+ let ( ) = #tarantool_crate:: msgpack:: Decode :: decode( & mut r_try , context)
882
882
. map_err( |err| #tarantool_crate:: msgpack:: DecodeError :: new:: <Self >( err) ) ?;
883
883
checker = Some ( Self :: #variant_ident) ;
884
884
Ok ( ( ) )
885
885
} ;
886
886
887
887
if try_unit( ) . is_ok( ) {
888
- let diff_len = r. len( ) - r_copied. len( ) ;
889
- * r = & r[ diff_len..] ;
888
+ * r = r_try;
890
889
return Result :: <Self , #tarantool_crate:: msgpack:: DecodeError >:: Ok ( checker. unwrap( ) ) ;
891
890
}
892
891
}
@@ -904,7 +903,7 @@ mod msgpack {
904
903
let var_type = & field. ty ;
905
904
906
905
let out = quote_spanned ! { field. span( ) =>
907
- let #var_name: #var_type = #tarantool_crate:: msgpack:: Decode :: decode( r_copied , context)
906
+ let #var_name: #var_type = #tarantool_crate:: msgpack:: Decode :: decode( & mut r_try , context)
908
907
. map_err( |err| #tarantool_crate:: msgpack:: DecodeError :: new:: <Self >( err) . with_part( format!( "field {}" , #index) ) ) ?;
909
908
} ;
910
909
@@ -914,9 +913,9 @@ mod msgpack {
914
913
. collect ( ) ;
915
914
quote ! {
916
915
// https://doc.rust-lang.org/beta/unstable-book/language-features/try-blocks.html (2016 -_-)
917
- let mut r_copied = & mut r . clone ( ) ;
916
+ let mut r_try = * r ;
918
917
let mut try_unnamed = || -> Result <( ) , #tarantool_crate:: msgpack:: DecodeError > {
919
- let amount = #tarantool_crate:: msgpack:: rmp:: decode:: read_array_len( r_copied )
918
+ let amount = #tarantool_crate:: msgpack:: rmp:: decode:: read_array_len( & mut r_try )
920
919
. map_err( |err| #tarantool_crate:: msgpack:: DecodeError :: new:: <Self >( err) ) ?;
921
920
if amount as usize != #fields_amount {
922
921
Err ( #tarantool_crate:: msgpack:: DecodeError :: new:: <Self >( "non-equal amount of type fields" ) ) ?;
@@ -929,8 +928,7 @@ mod msgpack {
929
928
} ;
930
929
931
930
if try_unnamed( ) . is_ok( ) {
932
- let diff_len = r. len( ) - r_copied. len( ) ;
933
- * r = & r[ diff_len..] ;
931
+ * r = r_try;
934
932
return Result :: <Self , #tarantool_crate:: msgpack:: DecodeError >:: Ok ( checker. unwrap( ) ) ;
935
933
}
936
934
}
@@ -948,7 +946,7 @@ mod msgpack {
948
946
let var_type = & field. ty ;
949
947
950
948
let out = quote_spanned ! { field. span( ) =>
951
- let #var_name: #var_type = #tarantool_crate:: msgpack:: Decode :: decode( r_copied , context)
949
+ let #var_name: #var_type = #tarantool_crate:: msgpack:: Decode :: decode( & mut r_try , context)
952
950
. map_err( |err| #tarantool_crate:: msgpack:: DecodeError :: new:: <Self >( err) . with_part( format!( "field {}" , stringify!( #field_ident) ) ) ) ?;
953
951
} ;
954
952
@@ -958,9 +956,9 @@ mod msgpack {
958
956
. collect ( ) ;
959
957
quote ! {
960
958
// https://doc.rust-lang.org/beta/unstable-book/language-features/try-blocks.html (2016 -_-)
961
- let mut r_copied = & mut r . clone ( ) ;
959
+ let mut r_try = * r ;
962
960
let mut try_named = || -> Result <( ) , #tarantool_crate:: msgpack:: DecodeError > {
963
- let amount = #tarantool_crate:: msgpack:: rmp:: decode:: read_array_len( r_copied )
961
+ let amount = #tarantool_crate:: msgpack:: rmp:: decode:: read_array_len( & mut r_try )
964
962
. map_err( |err| #tarantool_crate:: msgpack:: DecodeError :: new:: <Self >( err) ) ?;
965
963
if amount as usize != #fields_amount {
966
964
Err ( #tarantool_crate:: msgpack:: DecodeError :: new:: <Self >( "non-equal amount of type fields" ) ) ?;
@@ -973,8 +971,7 @@ mod msgpack {
973
971
} ;
974
972
975
973
if try_named( ) . is_ok( ) {
976
- let diff_len = r. len( ) - r_copied. len( ) ;
977
- * r = & r[ diff_len..] ;
974
+ * r = r_try;
978
975
return Result :: <Self , #tarantool_crate:: msgpack:: DecodeError >:: Ok ( checker. unwrap( ) ) ;
979
976
}
980
977
}
0 commit comments