mirror of
https://github.com/zaphar/merkle-dag.git
synced 2025-07-23 02:59:49 -04:00
Make the rocksdb and leveldb stores generic over hash
This commit is contained in:
parent
0e3e252570
commit
3110917edb
@ -18,11 +18,11 @@ use std::cell::RefCell;
|
|||||||
use std::path::Path;
|
use std::path::Path;
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
|
hash::HashWriter,
|
||||||
node::Node,
|
node::Node,
|
||||||
store::{Result, Store, StoreError},
|
store::{Result, Store, StoreError},
|
||||||
};
|
};
|
||||||
|
|
||||||
use crate::blake2::*;
|
|
||||||
use ciborium;
|
use ciborium;
|
||||||
use rusty_leveldb;
|
use rusty_leveldb;
|
||||||
|
|
||||||
@ -42,12 +42,15 @@ impl LevelStore {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Store<Blake2b512> for LevelStore {
|
impl<HW> Store<HW> for LevelStore
|
||||||
|
where
|
||||||
|
HW: HashWriter,
|
||||||
|
{
|
||||||
fn contains(&self, id: &[u8]) -> Result<bool> {
|
fn contains(&self, id: &[u8]) -> Result<bool> {
|
||||||
Ok(self.store.borrow_mut().get(id).is_some())
|
Ok(self.store.borrow_mut().get(id).is_some())
|
||||||
}
|
}
|
||||||
|
|
||||||
fn get(&self, id: &[u8]) -> Result<Option<Node<Blake2b512>>> {
|
fn get(&self, id: &[u8]) -> Result<Option<Node<HW>>> {
|
||||||
Ok(match self.store.borrow_mut().get(id) {
|
Ok(match self.store.borrow_mut().get(id) {
|
||||||
Some(bs) => ciborium::de::from_reader(bs.as_slice())
|
Some(bs) => ciborium::de::from_reader(bs.as_slice())
|
||||||
.map_err(|e| StoreError::StoreFailure(format!("Invalid serialization {:?}", e)))?,
|
.map_err(|e| StoreError::StoreFailure(format!("Invalid serialization {:?}", e)))?,
|
||||||
@ -55,7 +58,7 @@ impl Store<Blake2b512> for LevelStore {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
fn store(&mut self, node: Node<Blake2b512>) -> Result<()> {
|
fn store(&mut self, node: Node<HW>) -> Result<()> {
|
||||||
let mut buf = Vec::new();
|
let mut buf = Vec::new();
|
||||||
ciborium::ser::into_writer(&node, &mut buf).unwrap();
|
ciborium::ser::into_writer(&node, &mut buf).unwrap();
|
||||||
self.store.borrow_mut().put(node.id(), &buf)?;
|
self.store.borrow_mut().put(node.id(), &buf)?;
|
||||||
|
@ -16,8 +16,8 @@
|
|||||||
|
|
||||||
use std::path::Path;
|
use std::path::Path;
|
||||||
|
|
||||||
use crate::blake2::*;
|
|
||||||
use crate::{
|
use crate::{
|
||||||
|
hash::HashWriter,
|
||||||
node::Node,
|
node::Node,
|
||||||
store::{Result as StoreResult, Store, StoreError},
|
store::{Result as StoreResult, Store, StoreError},
|
||||||
};
|
};
|
||||||
@ -53,9 +53,10 @@ where
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<TM> Store<Blake2b512> for RocksStore<TM>
|
impl<TM, HW> Store<HW> for RocksStore<TM>
|
||||||
where
|
where
|
||||||
TM: ThreadMode,
|
TM: ThreadMode,
|
||||||
|
HW: HashWriter,
|
||||||
{
|
{
|
||||||
fn contains(&self, id: &[u8]) -> StoreResult<bool> {
|
fn contains(&self, id: &[u8]) -> StoreResult<bool> {
|
||||||
Ok(self
|
Ok(self
|
||||||
@ -65,7 +66,7 @@ where
|
|||||||
.is_some())
|
.is_some())
|
||||||
}
|
}
|
||||||
|
|
||||||
fn get(&self, id: &[u8]) -> StoreResult<Option<Node<Blake2b512>>> {
|
fn get(&self, id: &[u8]) -> StoreResult<Option<Node<HW>>> {
|
||||||
Ok(
|
Ok(
|
||||||
match self
|
match self
|
||||||
.store
|
.store
|
||||||
@ -80,7 +81,7 @@ where
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn store(&mut self, node: Node<Blake2b512>) -> StoreResult<()> {
|
fn store(&mut self, node: Node<HW>) -> StoreResult<()> {
|
||||||
let mut buf = Vec::new();
|
let mut buf = Vec::new();
|
||||||
ciborium::ser::into_writer(&node, &mut buf).unwrap();
|
ciborium::ser::into_writer(&node, &mut buf).unwrap();
|
||||||
self.store.put(node.id(), &buf)?;
|
self.store.put(node.id(), &buf)?;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user