aboutsummaryrefslogtreecommitdiff
path: root/database/src/backends/mod.rs
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2025-12-16 04:30:42 +0100
committermetamuffin <metamuffin@disroot.org>2025-12-16 04:30:42 +0100
commitfc7f3ae8e39a0398ceba7b9c44f58679c01a98da (patch)
tree77eef4d5e5ccb733b15ac4039e0a966f88ee8380 /database/src/backends/mod.rs
parent0e48299889c3c2b81bf351ffe5da71e0bcd4c22a (diff)
downloadjellything-fc7f3ae8e39a0398ceba7b9c44f58679c01a98da.tar
jellything-fc7f3ae8e39a0398ceba7b9c44f58679c01a98da.tar.bz2
jellything-fc7f3ae8e39a0398ceba7b9c44f58679c01a98da.tar.zst
tables
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"),
+ })
+}