aboutsummaryrefslogtreecommitdiff
path: root/database/src/backends
diff options
context:
space:
mode:
Diffstat (limited to 'database/src/backends')
-rw-r--r--database/src/backends/memory.rs14
-rw-r--r--database/src/backends/mod.rs10
-rw-r--r--database/src/backends/redb.rs14
-rw-r--r--database/src/backends/rocksdb.rs12
4 files changed, 34 insertions, 16 deletions
diff --git a/database/src/backends/memory.rs b/database/src/backends/memory.rs
index 0c1635f..e010a84 100644
--- a/database/src/backends/memory.rs
+++ b/database/src/backends/memory.rs
@@ -4,9 +4,7 @@
Copyright (C) 2026 metamuffin <metamuffin.org>
*/
-use crate::backends::{
- Database, ReadTransaction, ReadTxnFunction, WriteTransaction, WriteTxnFunction,
-};
+use crate::backends::{Database, ReadTransaction, WriteTransaction};
use anyhow::Result;
use std::{
collections::BTreeMap,
@@ -21,10 +19,16 @@ pub fn new() -> Memdb {
}
impl Database for Memdb {
- fn write_transaction(&self, f: &mut WriteTxnFunction) -> Result<()> {
+ fn write_transaction(
+ &self,
+ f: &mut dyn FnMut(&mut dyn WriteTransaction) -> Result<()>,
+ ) -> Result<()> {
f(&mut self.write().unwrap())
}
- fn read_transaction(&self, f: &mut ReadTxnFunction) -> Result<()> {
+ fn read_transaction(
+ &self,
+ f: &mut dyn FnMut(&dyn ReadTransaction) -> Result<()>,
+ ) -> Result<()> {
f(&self.read().unwrap())
}
}
diff --git a/database/src/backends/mod.rs b/database/src/backends/mod.rs
index 4cbb4cf..ba30b46 100644
--- a/database/src/backends/mod.rs
+++ b/database/src/backends/mod.rs
@@ -14,9 +14,13 @@ use std::{path::Path, sync::Arc};
pub type WriteTxnFunction = dyn FnMut(&mut dyn WriteTransaction) -> Result<()>;
pub type ReadTxnFunction = dyn FnMut(&dyn ReadTransaction) -> Result<()>;
-pub trait Database {
- fn write_transaction(&self, f: &mut WriteTxnFunction) -> Result<()>;
- fn read_transaction(&self, f: &mut ReadTxnFunction) -> Result<()>;
+pub trait Database: Send + Sync + 'static {
+ fn write_transaction(
+ &self,
+ f: &mut dyn FnMut(&mut dyn WriteTransaction) -> Result<()>,
+ ) -> Result<()>;
+ fn read_transaction(&self, f: &mut dyn FnMut(&dyn ReadTransaction) -> Result<()>)
+ -> Result<()>;
}
pub trait WriteTransaction: ReadTransaction {
fn set(&mut self, key: &[u8], value: &[u8]) -> Result<()>;
diff --git a/database/src/backends/redb.rs b/database/src/backends/redb.rs
index 70623b5..c0887c8 100644
--- a/database/src/backends/redb.rs
+++ b/database/src/backends/redb.rs
@@ -4,9 +4,7 @@
Copyright (C) 2026 metamuffin <metamuffin.org>
*/
-use crate::backends::{
- Database, ReadTransaction, ReadTxnFunction, WriteTransaction, WriteTxnFunction,
-};
+use crate::backends::{Database, ReadTransaction, WriteTransaction};
use anyhow::Result;
use redb::{AccessGuard, ReadableDatabase, ReadableTable, StorageError, Table, TableDefinition};
use std::path::Path;
@@ -18,7 +16,10 @@ pub fn new(path: &Path) -> Result<redb::Database> {
}
impl Database for redb::Database {
- fn write_transaction(&self, f: &mut WriteTxnFunction) -> Result<()> {
+ fn write_transaction(
+ &self,
+ f: &mut dyn FnMut(&mut dyn WriteTransaction) -> Result<()>,
+ ) -> Result<()> {
let txn = self.begin_write()?;
let mut table = txn.open_table(TABLE)?;
f(&mut table)?;
@@ -26,7 +27,10 @@ impl Database for redb::Database {
txn.commit()?;
Ok(())
}
- fn read_transaction(&self, f: &mut ReadTxnFunction) -> Result<()> {
+ fn read_transaction(
+ &self,
+ f: &mut dyn FnMut(&dyn ReadTransaction) -> Result<()>,
+ ) -> Result<()> {
let mut txn = self.begin_read()?;
f(&mut txn)?;
Ok(())
diff --git a/database/src/backends/rocksdb.rs b/database/src/backends/rocksdb.rs
index 1475dac..056af9e 100644
--- a/database/src/backends/rocksdb.rs
+++ b/database/src/backends/rocksdb.rs
@@ -4,7 +4,7 @@
Copyright (C) 2026 metamuffin <metamuffin.org>
*/
-use crate::backends::{Database, ReadTransaction, WriteTransaction, WriteTxnFunction};
+use crate::backends::{Database, ReadTransaction, WriteTransaction};
use anyhow::Result;
use rocksdb::{Direction, ErrorKind, IteratorMode, OptimisticTransactionDB};
use std::path::Path;
@@ -14,7 +14,10 @@ pub fn new(path: &Path) -> Result<OptimisticTransactionDB> {
}
impl Database for OptimisticTransactionDB {
- fn write_transaction(&self, f: &mut WriteTxnFunction) -> Result<()> {
+ fn write_transaction(
+ &self,
+ f: &mut dyn FnMut(&mut dyn WriteTransaction) -> Result<()>,
+ ) -> Result<()> {
loop {
let mut txn = self.transaction();
f(&mut txn)?;
@@ -25,7 +28,10 @@ impl Database for OptimisticTransactionDB {
}
}
}
- fn read_transaction(&self, f: &mut super::ReadTxnFunction) -> Result<()> {
+ fn read_transaction(
+ &self,
+ f: &mut dyn FnMut(&dyn ReadTransaction) -> Result<()>,
+ ) -> Result<()> {
loop {
let txn = self.transaction();
f(&txn)?;