aboutsummaryrefslogtreecommitdiff
path: root/database/src/backends
diff options
context:
space:
mode:
Diffstat (limited to 'database/src/backends')
-rw-r--r--database/src/backends/memory.rs2
-rw-r--r--database/src/backends/mod.rs13
-rw-r--r--database/src/backends/rocksdb.rs2
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<()> {