aboutsummaryrefslogtreecommitdiff
path: root/database/src/backends/redb.rs
diff options
context:
space:
mode:
Diffstat (limited to 'database/src/backends/redb.rs')
-rw-r--r--database/src/backends/redb.rs19
1 files changed, 17 insertions, 2 deletions
diff --git a/database/src/backends/redb.rs b/database/src/backends/redb.rs
index 39fe532..1b672b6 100644
--- a/database/src/backends/redb.rs
+++ b/database/src/backends/redb.rs
@@ -4,7 +4,9 @@
Copyright (C) 2025 metamuffin <metamuffin.org>
*/
-use crate::backends::DatabaseStorage;
+use std::path::Path;
+
+use crate::backends::KV;
use anyhow::Result;
use redb::{Database, ReadableDatabase, TableDefinition};
@@ -14,13 +16,26 @@ pub struct Redb {
const TABLE: TableDefinition<&[u8], &[u8]> = TableDefinition::new("kv");
-impl DatabaseStorage for Redb {
+impl Redb {
+ pub fn new(path: &Path) -> Result<Self> {
+ Ok(Self {
+ db: Database::create(path)?,
+ })
+ }
+}
+impl KV for Redb {
fn set(&self, key: &[u8], value: &[u8]) -> Result<()> {
let txn = self.db.begin_write()?;
txn.open_table(TABLE)?.insert(key, value)?;
txn.commit()?;
Ok(())
}
+ fn del(&self, key: &[u8]) -> Result<()> {
+ let txn = self.db.begin_write()?;
+ txn.open_table(TABLE)?.remove(key)?;
+ txn.commit()?;
+ Ok(())
+ }
fn get<'a>(&'a self, key: &[u8]) -> Result<Option<Vec<u8>>> {
let txn = self.db.begin_read()?;
match txn.open_table(TABLE)?.get(key)? {