From 56c00c4afff0d5a26d3ec7842a9b9344cb7df3bc Mon Sep 17 00:00:00 2001 From: Seulgi Kim Date: Mon, 3 Jun 2019 14:30:50 +0900 Subject: [PATCH] Implement Encodable/Decodable for Tuple with three items --- util/rlp/src/impls.rs | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/util/rlp/src/impls.rs b/util/rlp/src/impls.rs index 2e2e7209c4..efe7970e42 100644 --- a/util/rlp/src/impls.rs +++ b/util/rlp/src/impls.rs @@ -320,6 +320,25 @@ impl Decodable for String { } } +impl Encodable for (T1, T2, T3) { + fn rlp_append(&self, s: &mut RlpStream) { + s.begin_list(3).append(&self.0).append(&self.1).append(&self.2); + } +} + +impl Decodable for (T1, T2, T3) { + fn decode(rlp: &UntrustedRlp) -> Result { + let item_count = rlp.item_count()?; + if item_count != 3 { + return Err(DecoderError::RlpIncorrectListLen { + expected: 3, + got: item_count, + }) + } + Ok((rlp.val_at(0)?, rlp.val_at(1)?, rlp.val_at(2)?)) + } +} + #[macro_export] macro_rules! rlp_encode_and_decode_test { ($origin:expr) => { @@ -426,4 +445,10 @@ mod tests { stream.begin_list(0); assert_eq!(vec![0xC0], stream.out()); } + + #[test] + fn tuple() { + let tuple: (u32, u32, u32) = (1, 2, 3); + rlp_encode_and_decode_test!(tuple); + } }