From 3110917edba84fefbdce0c8e96f40f8691291ce4 Mon Sep 17 00:00:00 2001 From: Jeremy Wall Date: Wed, 24 Aug 2022 15:43:00 -0400 Subject: [PATCH] Make the rocksdb and leveldb stores generic over hash --- src/leveldb/mod.rs | 11 +++++++---- src/rocksdb/mod.rs | 9 +++++---- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/src/leveldb/mod.rs b/src/leveldb/mod.rs index 0894e68..ea79434 100644 --- a/src/leveldb/mod.rs +++ b/src/leveldb/mod.rs @@ -18,11 +18,11 @@ use std::cell::RefCell; use std::path::Path; use crate::{ + hash::HashWriter, node::Node, store::{Result, Store, StoreError}, }; -use crate::blake2::*; use ciborium; use rusty_leveldb; @@ -42,12 +42,15 @@ impl LevelStore { } } -impl Store for LevelStore { +impl Store for LevelStore +where + HW: HashWriter, +{ fn contains(&self, id: &[u8]) -> Result { Ok(self.store.borrow_mut().get(id).is_some()) } - fn get(&self, id: &[u8]) -> Result>> { + fn get(&self, id: &[u8]) -> Result>> { Ok(match self.store.borrow_mut().get(id) { Some(bs) => ciborium::de::from_reader(bs.as_slice()) .map_err(|e| StoreError::StoreFailure(format!("Invalid serialization {:?}", e)))?, @@ -55,7 +58,7 @@ impl Store for LevelStore { }) } - fn store(&mut self, node: Node) -> Result<()> { + fn store(&mut self, node: Node) -> Result<()> { let mut buf = Vec::new(); ciborium::ser::into_writer(&node, &mut buf).unwrap(); self.store.borrow_mut().put(node.id(), &buf)?; diff --git a/src/rocksdb/mod.rs b/src/rocksdb/mod.rs index 798b27f..1a506c3 100644 --- a/src/rocksdb/mod.rs +++ b/src/rocksdb/mod.rs @@ -16,8 +16,8 @@ use std::path::Path; -use crate::blake2::*; use crate::{ + hash::HashWriter, node::Node, store::{Result as StoreResult, Store, StoreError}, }; @@ -53,9 +53,10 @@ where } } -impl Store for RocksStore +impl Store for RocksStore where TM: ThreadMode, + HW: HashWriter, { fn contains(&self, id: &[u8]) -> StoreResult { Ok(self @@ -65,7 +66,7 @@ where .is_some()) } - fn get(&self, id: &[u8]) -> StoreResult>> { + fn get(&self, id: &[u8]) -> StoreResult>> { Ok( match self .store @@ -80,7 +81,7 @@ where ) } - fn store(&mut self, node: Node) -> StoreResult<()> { + fn store(&mut self, node: Node) -> StoreResult<()> { let mut buf = Vec::new(); ciborium::ser::into_writer(&node, &mut buf).unwrap(); self.store.put(node.id(), &buf)?;