aboutsummaryrefslogtreecommitdiff
path: root/database/src/backends/mod.rs
diff options
context:
space:
mode:
Diffstat (limited to 'database/src/backends/mod.rs')
-rw-r--r--database/src/backends/mod.rs13
1 files changed, 12 insertions, 1 deletions
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"),
+ })
+}