diff options
Diffstat (limited to 'database/src/backends')
| -rw-r--r-- | database/src/backends/memory.rs | 2 | ||||
| -rw-r--r-- | database/src/backends/mod.rs | 13 | ||||
| -rw-r--r-- | database/src/backends/rocksdb.rs | 2 |
3 files changed, 14 insertions, 3 deletions
diff --git a/database/src/backends/memory.rs b/database/src/backends/memory.rs index 2f19ce6..f1952a3 100644 --- a/database/src/backends/memory.rs +++ b/database/src/backends/memory.rs @@ -20,7 +20,7 @@ impl KV for Memory { self.0.write().unwrap().insert(key.to_vec(), value.to_vec()); Ok(()) } - fn get<'a>(&'a self, key: &[u8]) -> Result<Option<Vec<u8>>> { + fn get(&self, key: &[u8]) -> Result<Option<Vec<u8>>> { Ok(self.0.read().unwrap().get(key).cloned()) } fn del(&self, key: &[u8]) -> Result<()> { diff --git a/database/src/backends/mod.rs b/database/src/backends/mod.rs index b6d3770..814cc50 100644 --- a/database/src/backends/mod.rs +++ b/database/src/backends/mod.rs @@ -8,7 +8,9 @@ pub mod memory; pub mod redb; pub mod rocksdb; -use anyhow::Result; +use crate::backends::{memory::Memory, redb::Redb, rocksdb::Rocksdb}; +use anyhow::{Result, bail}; +use std::{path::Path, sync::Arc}; pub trait KV { fn set(&self, key: &[u8], value: &[u8]) -> Result<()>; @@ -17,3 +19,12 @@ pub trait KV { fn next(&self, key: &[u8]) -> Result<Option<Vec<u8>>>; fn prev(&self, key: &[u8]) -> Result<Option<Vec<u8>>>; } + +pub fn create_backend(driver: &str, path: &Path) -> Result<Arc<dyn KV>> { + Ok(match driver { + "rocksdb" => Arc::new(Rocksdb::new(path)?), + "redb" => Arc::new(Redb::new(path)?), + "memory" => Arc::new(Memory::new()), + _ => bail!("unknown db driver"), + }) +} diff --git a/database/src/backends/rocksdb.rs b/database/src/backends/rocksdb.rs index f4ed55b..31229a9 100644 --- a/database/src/backends/rocksdb.rs +++ b/database/src/backends/rocksdb.rs @@ -25,7 +25,7 @@ impl KV for Rocksdb { fn set(&self, key: &[u8], value: &[u8]) -> Result<()> { Ok(self.db.put(key, value)?) } - fn get<'a>(&'a self, key: &[u8]) -> Result<Option<Vec<u8>>> { + fn get(&self, key: &[u8]) -> Result<Option<Vec<u8>>> { Ok(self.db.get(key)?) } fn del(&self, key: &[u8]) -> Result<()> { |