summaryrefslogtreecommitdiffstats
path: root/src/merkletree.rs
diff options
context:
space:
mode:
authorSanto Cariotti <santo@dcariotti.me>2025-07-07 15:14:12 +0000
committerSanto Cariotti <santo@dcariotti.me>2025-07-07 15:14:12 +0000
commit5fb45710f57f95eec527958400f8ec0a049c5fe4 (patch)
tree5a698f60ceec8954fcc5b2e19cbc7b9beea06a43 /src/merkletree.rs
parent2ef7371f7a4eefe7478cad43cb4922efaa12876a (diff)
Make tree for folders
Diffstat (limited to 'src/merkletree.rs')
-rw-r--r--src/merkletree.rs16
1 files changed, 15 insertions, 1 deletions
diff --git a/src/merkletree.rs b/src/merkletree.rs
index c3c9fd7..fdbb5ac 100644
--- a/src/merkletree.rs
+++ b/src/merkletree.rs
@@ -1,7 +1,7 @@
//! Provides the MerkleTree structure and associated methods for creating and interacting
//! with binary Merkle trees using custom hashers.
-use crate::{hasher::Hasher, node::Node};
+use crate::{fs, hasher::Hasher, node::Node};
use rayon::prelude::*;
/// A binary Merkle tree implementation.
@@ -60,6 +60,20 @@ impl MerkleTree {
Self::build(hasher, leaves)
}
+ /// Construct a Merkletree from an iter of String-s.
+ pub fn from_paths<H>(hasher: H, paths: Vec<String>) -> Self
+ where
+ H: Hasher + 'static + std::marker::Sync + Clone,
+ {
+ let mut leaves = fs::hash_dir(hasher.clone(), paths);
+
+ if leaves.len() % 2 != 0 {
+ leaves.push(leaves.last().unwrap().clone());
+ }
+
+ Self::build(hasher, leaves)
+ }
+
/// Constructs the internal nodes of the tree from the leaves upward and computes the root.
fn build<H>(hasher: H, nodes: Vec<Node>) -> Self
where