From d543f6fe11a32dcead2310f1fb4c2abd303f5f8c Mon Sep 17 00:00:00 2001 From: metamuffin Date: Wed, 24 Dec 2025 09:02:17 +0100 Subject: db abstraction looks good --- database/src/backends/memory.rs | 42 ++++++++++++++++++++--------------------- 1 file changed, 20 insertions(+), 22 deletions(-) (limited to 'database/src/backends/memory.rs') diff --git a/database/src/backends/memory.rs b/database/src/backends/memory.rs index 3c2fdea..302b232 100644 --- a/database/src/backends/memory.rs +++ b/database/src/backends/memory.rs @@ -41,33 +41,31 @@ impl ReadTransaction for RwLockWriteGuard<'_, Inner> { fn get(&self, key: &[u8]) -> Result>> { Ok((**self).get(key).cloned()) } - fn next(&self, key: &[u8]) -> Result>> { - Ok((**self) - .range(key.to_vec()..) - .next() - .map(|(k, _)| k.to_owned())) - } - fn prev(&self, key: &[u8]) -> Result>> { - Ok((**self) - .range(..key.to_vec()) - .next_back() - .map(|(k, _)| k.to_owned())) + fn iter<'a>( + &'a self, + key: &[u8], + reverse: bool, + ) -> Result>> + 'a>> { + Ok(if reverse { + Box::new(self.range(key.to_vec()..).map(|e| Ok(e.0.to_vec()))) + } else { + Box::new(self.range(..=key.to_vec()).rev().map(|e| Ok(e.0.to_vec()))) + }) } } impl ReadTransaction for RwLockReadGuard<'_, Inner> { fn get(&self, key: &[u8]) -> Result>> { Ok((**self).get(key).cloned()) } - fn next(&self, key: &[u8]) -> Result>> { - Ok((**self) - .range(key.to_vec()..) - .next() - .map(|(k, _)| k.to_owned())) - } - fn prev(&self, key: &[u8]) -> Result>> { - Ok((**self) - .range(..key.to_vec()) - .next_back() - .map(|(k, _)| k.to_owned())) + fn iter<'a>( + &'a self, + key: &[u8], + reverse: bool, + ) -> Result>> + 'a>> { + Ok(if reverse { + Box::new(self.range(key.to_vec()..).map(|e| Ok(e.0.to_vec()))) + } else { + Box::new(self.range(..=key.to_vec()).rev().map(|e| Ok(e.0.to_vec()))) + }) } } -- cgit v1.3