diff --git a/tree_hash/src/lib.rs b/tree_hash/src/lib.rs index 18567e4..1ab1496 100644 --- a/tree_hash/src/lib.rs +++ b/tree_hash/src/lib.rs @@ -119,6 +119,16 @@ pub trait TreeHash { fn tree_hash_root(&self) -> Hash256; } +pub trait TreeHashMut { + fn tree_hash_type_mut() -> TreeHashType; + + fn tree_hash_packed_encoding_mut(&self) -> PackedEncoding; + + fn tree_hash_packing_factor_mut() -> usize; + + fn tree_hash_root_mut(&mut self) -> Hash256; +} + /// Punch through references. impl<'a, T> TreeHash for &'a T where @@ -141,6 +151,27 @@ where } } +impl TreeHashMut for T +where + T: TreeHash, +{ + fn tree_hash_type_mut() -> TreeHashType { + ::tree_hash_type() + } + + fn tree_hash_packed_encoding_mut(&self) -> PackedEncoding { + ::tree_hash_packed_encoding(self) + } + + fn tree_hash_packing_factor_mut() -> usize { + ::tree_hash_packing_factor() + } + + fn tree_hash_root_mut(&mut self) -> Hash256 { + ::tree_hash_root(self) + } +} + #[macro_export] macro_rules! tree_hash_ssz_encoding_as_vector { ($type: ident) => {