lambdaworks_crypto/merkle_tree/
traits.rs1use alloc::vec::Vec;
2#[cfg(feature = "parallel")]
3use rayon::prelude::{IntoParallelRefIterator, ParallelIterator};
4
5pub trait IsMerkleTreeBackend {
9 type Node: PartialEq + Eq + Clone + Sync + Send;
10 type Data: Sync + Send;
11
12 fn hash_data(leaf: &Self::Data) -> Self::Node;
14
15 fn hash_leaves(unhashed_leaves: &[Self::Data]) -> Vec<Self::Node> {
18 #[cfg(feature = "parallel")]
19 let iter = unhashed_leaves.par_iter();
20 #[cfg(not(feature = "parallel"))]
21 let iter = unhashed_leaves.iter();
22
23 iter.map(|leaf| Self::hash_data(leaf)).collect()
24 }
25
26 fn hash_new_parent(child_1: &Self::Node, child_2: &Self::Node) -> Self::Node;
29}