Skip to content

Commit f9286b5

Browse files
fix: adding reserved prefix to decode (#51)
* fix: adding reserve prefix to decode * formatting * fix: removing some unwanted renaming of variables and added test * clippy changes --------- Co-authored-by: Michael Sproul <michael@sigmaprime.io>
1 parent a548764 commit f9286b5

File tree

2 files changed

+30
-14
lines changed

2 files changed

+30
-14
lines changed

ssz_derive/src/lib.rs

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -818,7 +818,7 @@ fn ssz_decode_derive_struct(item: &DeriveInput, struct_data: &DataStruct) -> Tok
818818
}
819819

820820
fixed_decodes.push(quote! {
821-
let (slice, bytes) = bytes.split_at(#ssz_fixed_len);
821+
let (slice, __bytes) = __bytes.split_at(#ssz_fixed_len);
822822
let #ident = #from_ssz_bytes?;
823823
});
824824
is_fixed_lens.push(is_ssz_fixed_len);
@@ -848,11 +848,11 @@ fn ssz_decode_derive_struct(item: &DeriveInput, struct_data: &DataStruct) -> Tok
848848
}
849849
}
850850

851-
fn from_ssz_bytes(bytes: &[u8]) -> std::result::Result<Self, ssz::DecodeError> {
851+
fn from_ssz_bytes(__bytes: &[u8]) -> std::result::Result<Self, ssz::DecodeError> {
852852
if <Self as ssz::Decode>::is_ssz_fixed_len() {
853-
if bytes.len() != <Self as ssz::Decode>::ssz_fixed_len() {
853+
if __bytes.len() != <Self as ssz::Decode>::ssz_fixed_len() {
854854
return Err(ssz::DecodeError::InvalidByteLength {
855-
len: bytes.len(),
855+
len: __bytes.len(),
856856
expected: <Self as ssz::Decode>::ssz_fixed_len(),
857857
});
858858
}
@@ -867,7 +867,7 @@ fn ssz_decode_derive_struct(item: &DeriveInput, struct_data: &DataStruct) -> Tok
867867
)*
868868
})
869869
} else {
870-
let mut builder = ssz::SszDecoderBuilder::new(bytes);
870+
let mut builder = ssz::SszDecoderBuilder::new(__bytes);
871871

872872
#(
873873
#register_types
@@ -932,7 +932,7 @@ fn ssz_decode_derive_struct_transparent(
932932
});
933933
} else {
934934
fields.push(quote! {
935-
#name: <_>::from_ssz_bytes(bytes)?,
935+
#name: <_>::from_ssz_bytes(__bytes)?,
936936
});
937937
wrapped_type = Some(ty);
938938
}
@@ -944,7 +944,7 @@ fn ssz_decode_derive_struct_transparent(
944944
});
945945
} else {
946946
fields.push(quote! {
947-
#index:<_>::from_ssz_bytes(bytes)?,
947+
#index:<_>::from_ssz_bytes(__bytes)?,
948948
});
949949
wrapped_type = Some(ty);
950950
}
@@ -963,7 +963,7 @@ fn ssz_decode_derive_struct_transparent(
963963
<#ty as ssz::Decode>::ssz_fixed_len()
964964
}
965965

966-
fn from_ssz_bytes(bytes: &[u8]) -> std::result::Result<Self, ssz::DecodeError> {
966+
fn from_ssz_bytes(__bytes: &[u8]) -> std::result::Result<Self, ssz::DecodeError> {
967967
Ok(Self {
968968
#(
969969
#fields
@@ -1009,8 +1009,8 @@ fn ssz_decode_derive_enum_tag(derive_input: &DeriveInput, enum_data: &DataEnum)
10091009
1
10101010
}
10111011

1012-
fn from_ssz_bytes(bytes: &[u8]) -> std::result::Result<Self, ssz::DecodeError> {
1013-
let byte = bytes
1012+
fn from_ssz_bytes(__bytes: &[u8]) -> std::result::Result<Self, ssz::DecodeError> {
1013+
let byte = __bytes
10141014
.first()
10151015
.copied()
10161016
.ok_or(ssz::DecodeError::OutOfBoundsByte { i: 0 })?;
@@ -1061,12 +1061,12 @@ fn ssz_decode_derive_enum_union(derive_input: &DeriveInput, enum_data: &DataEnum
10611061
false
10621062
}
10631063

1064-
fn from_ssz_bytes(bytes: &[u8]) -> Result<Self, ssz::DecodeError> {
1064+
fn from_ssz_bytes(__bytes: &[u8]) -> Result<Self, ssz::DecodeError> {
10651065
// Sanity check to ensure the definition here does not drift from the one defined in
10661066
// `ssz`.
10671067
debug_assert_eq!(#MAX_UNION_SELECTOR, ssz::MAX_UNION_SELECTOR);
10681068

1069-
let (selector, body) = ssz::split_union_bytes(bytes)?;
1069+
let (selector, body) = ssz::split_union_bytes(__bytes)?;
10701070

10711071
match selector.into() {
10721072
#(
@@ -1128,9 +1128,9 @@ fn ssz_decode_derive_enum_transparent(
11281128
false
11291129
}
11301130

1131-
fn from_ssz_bytes(bytes: &[u8]) -> Result<Self, ssz::DecodeError> {
1131+
fn from_ssz_bytes(__bytes: &[u8]) -> Result<Self, ssz::DecodeError> {
11321132
#(
1133-
if let Ok(var) = <#var_types as ssz::Decode>::from_ssz_bytes(bytes) {
1133+
if let Ok(var) = <#var_types as ssz::Decode>::from_ssz_bytes(__bytes) {
11341134
return Ok(#constructors(var));
11351135
}
11361136
)*

ssz_derive/tests/tests.rs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -258,6 +258,22 @@ fn transparent_struct_newtype_skipped_field_reverse() {
258258
);
259259
}
260260

261+
#[derive(PartialEq, Debug, Encode, Decode)]
262+
struct StructWithMoreThanOneFieldAndFirstFieldAsBytes {
263+
bytes: Vec<u8>,
264+
length: u8,
265+
}
266+
267+
#[test]
268+
fn struct_with_more_than_one_field_and_first_field_as_bytes() {
269+
let test_struct = StructWithMoreThanOneFieldAndFirstFieldAsBytes {
270+
bytes: vec![42_u8],
271+
length: 7,
272+
};
273+
274+
assert_encode_decode(&test_struct, &[5, 0, 0, 0, 7, 42]);
275+
}
276+
261277
#[derive(PartialEq, Debug, Encode)]
262278
#[ssz(struct_behaviour = "transparent")]
263279
struct TransparentStructSkippedFieldEncodeOnly {

0 commit comments

Comments
 (0)