From fd89299abe0ecc1622eb24cf08c31ce0cfdf3348 Mon Sep 17 00:00:00 2001 From: Magamedrasul Ibragimov Date: Wed, 19 Oct 2022 13:42:21 +0300 Subject: [PATCH] chore: add template for the project --- src/lib.rs | 68 ++++++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 58 insertions(+), 10 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 7d12d9a..50bdce8 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,14 +1,62 @@ -pub fn add(left: usize, right: usize) -> usize { - left + right -} +pub struct Error(String); +pub type Result = std::result::Result; -#[cfg(test)] -mod tests { - use super::*; +pub struct VecDB; +pub struct Poseidon; - #[test] - fn it_works() { - let result = add(2, 2); - assert_eq!(result, 4); +pub type DefaultDatabase = VecDB; +pub type DefaultHasher = Poseidon; + +impl Hasher for Poseidon { + type Fr = i32; + + fn hash(_input: &[i32]) -> i32 { + 0 } } + +impl Database for VecDB { + fn new(dbpath: &str) -> Self { + Self {} + } + fn get(&self, key: &[u8]) -> Result>> { + Ok(Some(vec![])) + } + fn put(&mut self, key: &[u8]) -> Result<()> { + Ok(()) + } + fn delete(&mut self, key: &[u8]) -> Result<()> { + Ok(()) + } +} + +pub trait Hasher { + type Fr: Copy + Eq + Default; + + fn hash(input: &[Self::Fr]) -> Self::Fr; +} + +pub trait Database { + fn new(dbpath: &str) -> Self; + fn get(&self, key: &[u8]) -> Result>>; + fn put(&mut self, key: &[u8]) -> Result<()>; + fn delete(&mut self, key: &[u8]) -> Result<()>; +} + +pub struct MerkleTree +where + D: Database, + H: Hasher, +{ + db: D, + h: H, +} + +impl MerkleTree {} + +impl MerkleTree +where + D: Database, + H: Hasher, +{ +}