Add tree_hash_derive crate

This commit is contained in:
Paul Hauner
2019-04-15 15:45:05 +10:00
parent 354f823c16
commit 2be05a466f
10 changed files with 163 additions and 12 deletions

View File

@@ -12,7 +12,7 @@ pub struct BTreeOverlay {
impl BTreeOverlay {
pub fn new<T>(item: &T, initial_offset: usize) -> Result<Self, Error>
where
T: CachedTreeHashSubtree<T>,
T: CachedTreeHashSubTree<T>,
{
item.btree_overlay(initial_offset)
}

View File

@@ -15,7 +15,7 @@ impl Into<Vec<u8>> for TreeHashCache {
impl TreeHashCache {
pub fn new<T>(item: &T) -> Result<Self, Error>
where
T: CachedTreeHashSubtree<T>,
T: CachedTreeHashSubTree<T>,
{
item.new_cache()
}
@@ -32,7 +32,7 @@ impl TreeHashCache {
leaves_and_subtrees: Vec<Self>,
) -> Result<Self, Error>
where
T: CachedTreeHashSubtree<T>,
T: CachedTreeHashSubTree<T>,
{
let offset_handler = BTreeOverlay::new(item, 0)?;

View File

@@ -4,7 +4,7 @@ use ssz::ssz_encode;
mod vec;
impl CachedTreeHashSubtree<u64> for u64 {
impl CachedTreeHashSubTree<u64> for u64 {
fn item_type() -> ItemType {
ItemType::Basic
}

View File

@@ -1,8 +1,8 @@
use super::*;
impl<T> CachedTreeHashSubtree<Vec<T>> for Vec<T>
impl<T> CachedTreeHashSubTree<Vec<T>> for Vec<T>
where
T: CachedTreeHashSubtree<T>,
T: CachedTreeHashSubTree<T>,
{
fn item_type() -> ItemType {
ItemType::List
@@ -168,7 +168,7 @@ where
fn get_packed_leaves<T>(vec: &Vec<T>) -> Result<Vec<u8>, Error>
where
T: CachedTreeHashSubtree<T>,
T: CachedTreeHashSubTree<T>,
{
let num_packed_bytes = (BYTES_PER_CHUNK / T::packing_factor()) * vec.len();
let num_leaves = num_sanitized_leaves(num_packed_bytes);

View File

@@ -35,7 +35,7 @@ pub enum ItemType {
Composite,
}
pub trait CachedTreeHash<T>: CachedTreeHashSubtree<T> + Sized {
pub trait CachedTreeHash<T>: CachedTreeHashSubTree<T> + Sized {
fn update_internal_tree_hash_cache(self, old: T) -> Result<(Self, Self), Error>;
fn cached_tree_hash_root(&self) -> Option<Vec<u8>>;
@@ -43,7 +43,7 @@ pub trait CachedTreeHash<T>: CachedTreeHashSubtree<T> + Sized {
fn clone_without_tree_hash_cache(&self) -> Self;
}
pub trait CachedTreeHashSubtree<Item> {
pub trait CachedTreeHashSubTree<Item> {
fn item_type() -> ItemType;
fn btree_overlay(&self, chunk_offset: usize) -> Result<BTreeOverlay, Error>;