restricted_sparse_merkle_tree/
traits.rs

1use crate::{
2    error::Error,
3    tree::{BranchNode, LeafNode},
4    H256,
5};
6
7/// Trait for customize hash function
8pub trait Hasher {
9    fn write_h256(&mut self, h: &H256);
10    fn finish(self) -> H256;
11}
12
13/// Trait for define value structures
14pub trait Value {
15    fn to_h256(&self) -> H256;
16    fn zero() -> Self;
17}
18
19impl Value for H256 {
20    fn to_h256(&self) -> H256 {
21        *self
22    }
23    fn zero() -> Self {
24        H256::zero()
25    }
26}
27
28/// Trait for customize backend storage
29pub trait Store<V> {
30    fn get_branch(&self, node: &H256) -> Result<Option<BranchNode>, Error>;
31    fn get_leaf(&self, leaf_hash: &H256) -> Result<Option<LeafNode<V>>, Error>;
32    fn insert_branch(&mut self, node: H256, branch: BranchNode) -> Result<(), Error>;
33    fn insert_leaf(&mut self, leaf_hash: H256, leaf: LeafNode<V>) -> Result<(), Error>;
34    fn remove_branch(&mut self, node: &H256) -> Result<(), Error>;
35    fn remove_leaf(&mut self, leaf_hash: &H256) -> Result<(), Error>;
36}