From 1621901f0de79fc05063f7efbb3f4c8be2247171 Mon Sep 17 00:00:00 2001 From: Paul Hauner Date: Tue, 16 Oct 2018 13:44:26 +1100 Subject: [PATCH] Update SSZ - Implement generic list decoding> - Expose `encode` mod. - Add convenience encoding function. --- beacon_chain/utils/ssz/src/impl_decode.rs | 11 +++++++++++ beacon_chain/utils/ssz/src/lib.rs | 12 +++++++++++- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/beacon_chain/utils/ssz/src/impl_decode.rs b/beacon_chain/utils/ssz/src/impl_decode.rs index 2833037f31..617585fd6d 100644 --- a/beacon_chain/utils/ssz/src/impl_decode.rs +++ b/beacon_chain/utils/ssz/src/impl_decode.rs @@ -1,4 +1,5 @@ use super::ethereum_types::H256; +use super::decode::decode_ssz_list; use super::{ DecodeError, Decodable, @@ -65,6 +66,16 @@ impl Decodable for H256 { } } +impl Decodable for Vec + where T: Decodable +{ + fn ssz_decode(bytes: &[u8], index: usize) + -> Result<(Self, usize), DecodeError> + { + decode_ssz_list(bytes, index) + } +} + #[cfg(test)] mod tests { use super::*; diff --git a/beacon_chain/utils/ssz/src/lib.rs b/beacon_chain/utils/ssz/src/lib.rs index bf0de9262a..47ee3cd96a 100644 --- a/beacon_chain/utils/ssz/src/lib.rs +++ b/beacon_chain/utils/ssz/src/lib.rs @@ -11,8 +11,8 @@ extern crate bytes; extern crate ethereum_types; pub mod decode; +pub mod encode; -mod encode; mod impl_encode; mod impl_decode; @@ -29,3 +29,13 @@ pub use encode::{ pub const LENGTH_BYTES: usize = 4; pub const MAX_LIST_SIZE : usize = 1 << (4 * 8); + + +/// Convenience function to SSZ encode an object supporting ssz::Encode. +pub fn ssz_encode(val: &T) -> Vec + where T: Encodable +{ + let mut ssz_stream = SszStream::new(); + ssz_stream.append(val); + ssz_stream.drain() +}