diff options
Diffstat (limited to 'database/src/backends')
| -rw-r--r-- | database/src/backends/memory.rs | 14 | ||||
| -rw-r--r-- | database/src/backends/mod.rs | 10 | ||||
| -rw-r--r-- | database/src/backends/redb.rs | 14 | ||||
| -rw-r--r-- | database/src/backends/rocksdb.rs | 12 |
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)?; |