Skip to content

Commit 6a60350

Browse files
authored
Add decode length for tuple (#209)
* decode_length for tuple' * add test * refactor
1 parent 18b49a8 commit 6a60350

File tree

1 file changed

+16
-0
lines changed

1 file changed

+16
-0
lines changed

src/codec.rs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1017,6 +1017,12 @@ macro_rules! tuple_impl {
10171017
}
10181018
}
10191019

1020+
impl<$one: DecodeLength> DecodeLength for ($one,) {
1021+
fn len(self_encoded: &[u8]) -> Result<usize, Error> {
1022+
$one::len(self_encoded)
1023+
}
1024+
}
1025+
10201026
impl<$one: EncodeLike<$extra>, $extra: Encode> crate::EncodeLike<($extra,)> for ($one,) {}
10211027
};
10221028
(($first:ident, $fextra:ident), $( ( $rest:ident, $rextra:ident ), )+) => {
@@ -1060,6 +1066,12 @@ macro_rules! tuple_impl {
10601066
$($rest: EncodeLike<$rextra>, $rextra: Encode),+> crate::EncodeLike<($fextra, $( $rextra ),+)>
10611067
for ($first, $($rest),+) {}
10621068

1069+
impl<$first: DecodeLength, $($rest),+> DecodeLength for ($first, $($rest),+) {
1070+
fn len(self_encoded: &[u8]) -> Result<usize, Error> {
1071+
$first::len(self_encoded)
1072+
}
1073+
}
1074+
10631075
tuple_impl!( $( ($rest, $rextra), )+ );
10641076
}
10651077
}
@@ -1288,13 +1300,17 @@ mod tests {
12881300
let mut ll = LinkedList::new();
12891301
ll.push_back(1);
12901302
ll.push_back(2);
1303+
let t1: (Vec<_>,) = (vector.clone(),);
1304+
let t2: (Vec<_>, u32) = (vector.clone(), 3u32);
12911305

12921306
test_encode_length(&vector, 10);
12931307
test_encode_length(&btree_map, 2);
12941308
test_encode_length(&btree_set, 2);
12951309
test_encode_length(&vd, 2);
12961310
test_encode_length(&bh, 2);
12971311
test_encode_length(&ll, 2);
1312+
test_encode_length(&t1, 10);
1313+
test_encode_length(&t2, 10);
12981314
}
12991315

13001316
#[test]

0 commit comments

Comments
 (0)