Remove panics from packed_encoding
This commit is contained in:
parent
e6c33e1b60
commit
cb9b59b93d
@ -22,8 +22,8 @@ impl CachedTreeHash<u64> for u64 {
|
|||||||
8
|
8
|
||||||
}
|
}
|
||||||
|
|
||||||
fn packed_encoding(&self) -> Vec<u8> {
|
fn packed_encoding(&self) -> Result<Vec<u8>, Error> {
|
||||||
ssz_encode(self)
|
Ok(ssz_encode(self))
|
||||||
}
|
}
|
||||||
|
|
||||||
fn packing_factor() -> usize {
|
fn packing_factor() -> usize {
|
||||||
@ -55,7 +55,9 @@ where
|
|||||||
|
|
||||||
fn build_tree_hash_cache(&self) -> Result<TreeHashCache, Error> {
|
fn build_tree_hash_cache(&self) -> Result<TreeHashCache, Error> {
|
||||||
match T::item_type() {
|
match T::item_type() {
|
||||||
ItemType::Basic => TreeHashCache::from_bytes(merkleize(get_packed_leaves(self)), false),
|
ItemType::Basic => {
|
||||||
|
TreeHashCache::from_bytes(merkleize(get_packed_leaves(self)?), false)
|
||||||
|
}
|
||||||
ItemType::Composite | ItemType::List => {
|
ItemType::Composite | ItemType::List => {
|
||||||
let subtrees = self
|
let subtrees = self
|
||||||
.iter()
|
.iter()
|
||||||
@ -88,8 +90,8 @@ where
|
|||||||
self.iter().fold(0, |acc, item| acc + item.num_bytes())
|
self.iter().fold(0, |acc, item| acc + item.num_bytes())
|
||||||
}
|
}
|
||||||
|
|
||||||
fn packed_encoding(&self) -> Vec<u8> {
|
fn packed_encoding(&self) -> Result<Vec<u8>, Error> {
|
||||||
panic!("List should never be packed")
|
Err(Error::ShouldNeverBePacked(Self::item_type()))
|
||||||
}
|
}
|
||||||
|
|
||||||
fn packing_factor() -> usize {
|
fn packing_factor() -> usize {
|
||||||
@ -142,7 +144,7 @@ where
|
|||||||
|
|
||||||
match T::item_type() {
|
match T::item_type() {
|
||||||
ItemType::Basic => {
|
ItemType::Basic => {
|
||||||
let leaves = get_packed_leaves(self);
|
let leaves = get_packed_leaves(self)?;
|
||||||
|
|
||||||
for (i, chunk) in offset_handler.iter_leaf_nodes().enumerate() {
|
for (i, chunk) in offset_handler.iter_leaf_nodes().enumerate() {
|
||||||
if let Some(latest) = leaves.get(i * HASHSIZE..(i + 1) * HASHSIZE) {
|
if let Some(latest) = leaves.get(i * HASHSIZE..(i + 1) * HASHSIZE) {
|
||||||
@ -213,7 +215,7 @@ where
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn get_packed_leaves<T>(vec: &Vec<T>) -> Vec<u8>
|
fn get_packed_leaves<T>(vec: &Vec<T>) -> Result<Vec<u8>, Error>
|
||||||
where
|
where
|
||||||
T: CachedTreeHash<T>,
|
T: CachedTreeHash<T>,
|
||||||
{
|
{
|
||||||
@ -223,8 +225,8 @@ where
|
|||||||
let mut packed = Vec::with_capacity(num_leaves * HASHSIZE);
|
let mut packed = Vec::with_capacity(num_leaves * HASHSIZE);
|
||||||
|
|
||||||
for item in vec {
|
for item in vec {
|
||||||
packed.append(&mut item.packed_encoding());
|
packed.append(&mut item.packed_encoding()?);
|
||||||
}
|
}
|
||||||
|
|
||||||
sanitise_bytes(packed)
|
Ok(sanitise_bytes(packed))
|
||||||
}
|
}
|
||||||
|
@ -23,6 +23,7 @@ pub enum Error {
|
|||||||
UnableToObtainSlices,
|
UnableToObtainSlices,
|
||||||
UnableToGrowMerkleTree,
|
UnableToGrowMerkleTree,
|
||||||
UnableToShrinkMerkleTree,
|
UnableToShrinkMerkleTree,
|
||||||
|
ShouldNeverBePacked(ItemType),
|
||||||
BytesAreNotEvenChunks(usize),
|
BytesAreNotEvenChunks(usize),
|
||||||
NoModifiedFieldForChunk(usize),
|
NoModifiedFieldForChunk(usize),
|
||||||
NoBytesForChunk(usize),
|
NoBytesForChunk(usize),
|
||||||
@ -47,7 +48,7 @@ pub trait CachedTreeHash<Item>: Debug {
|
|||||||
|
|
||||||
fn btree_overlay(&self, chunk_offset: usize) -> Result<BTreeOverlay, Error>;
|
fn btree_overlay(&self, chunk_offset: usize) -> Result<BTreeOverlay, Error>;
|
||||||
|
|
||||||
fn packed_encoding(&self) -> Vec<u8>;
|
fn packed_encoding(&self) -> Result<Vec<u8>, Error>;
|
||||||
|
|
||||||
fn packing_factor() -> usize;
|
fn packing_factor() -> usize;
|
||||||
|
|
||||||
|
@ -55,8 +55,8 @@ impl CachedTreeHash<Inner> for Inner {
|
|||||||
BTreeOverlay::from_lengths(chunk_offset, lengths)
|
BTreeOverlay::from_lengths(chunk_offset, lengths)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn packed_encoding(&self) -> Vec<u8> {
|
fn packed_encoding(&self) -> Result<Vec<u8>, Error> {
|
||||||
panic!("Struct should never be packed")
|
Err(Error::ShouldNeverBePacked(Self::item_type()))
|
||||||
}
|
}
|
||||||
|
|
||||||
fn packing_factor() -> usize {
|
fn packing_factor() -> usize {
|
||||||
@ -133,8 +133,8 @@ impl CachedTreeHash<Outer> for Outer {
|
|||||||
BTreeOverlay::from_lengths(chunk_offset, lengths)
|
BTreeOverlay::from_lengths(chunk_offset, lengths)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn packed_encoding(&self) -> Vec<u8> {
|
fn packed_encoding(&self) -> Result<Vec<u8>, Error> {
|
||||||
panic!("Struct should never be packed")
|
Err(Error::ShouldNeverBePacked(Self::item_type()))
|
||||||
}
|
}
|
||||||
|
|
||||||
fn packing_factor() -> usize {
|
fn packing_factor() -> usize {
|
||||||
|
Loading…
Reference in New Issue
Block a user