diff options
| author | metamuffin <metamuffin@disroot.org> | 2025-12-24 09:02:17 +0100 |
|---|---|---|
| committer | metamuffin <metamuffin@disroot.org> | 2025-12-24 09:02:17 +0100 |
| commit | d543f6fe11a32dcead2310f1fb4c2abd303f5f8c (patch) | |
| tree | 3ba8274f0906250809ca5fa1b08c9b5f53b88cc7 /database/src/backends/memory.rs | |
| parent | eac0de36221440571fe686074b04b71bf98cf727 (diff) | |
| download | jellything-d543f6fe11a32dcead2310f1fb4c2abd303f5f8c.tar jellything-d543f6fe11a32dcead2310f1fb4c2abd303f5f8c.tar.bz2 jellything-d543f6fe11a32dcead2310f1fb4c2abd303f5f8c.tar.zst | |
db abstraction looks good
Diffstat (limited to 'database/src/backends/memory.rs')
| -rw-r--r-- | database/src/backends/memory.rs | 42 |
1 files changed, 20 insertions, 22 deletions
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<Option<Vec<u8>>> { Ok((**self).get(key).cloned()) } - fn next(&self, key: &[u8]) -> Result<Option<Vec<u8>>> { - Ok((**self) - .range(key.to_vec()..) - .next() - .map(|(k, _)| k.to_owned())) - } - fn prev(&self, key: &[u8]) -> Result<Option<Vec<u8>>> { - Ok((**self) - .range(..key.to_vec()) - .next_back() - .map(|(k, _)| k.to_owned())) + fn iter<'a>( + &'a self, + key: &[u8], + reverse: bool, + ) -> Result<Box<dyn Iterator<Item = Result<Vec<u8>>> + '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<Option<Vec<u8>>> { Ok((**self).get(key).cloned()) } - fn next(&self, key: &[u8]) -> Result<Option<Vec<u8>>> { - Ok((**self) - .range(key.to_vec()..) - .next() - .map(|(k, _)| k.to_owned())) - } - fn prev(&self, key: &[u8]) -> Result<Option<Vec<u8>>> { - Ok((**self) - .range(..key.to_vec()) - .next_back() - .map(|(k, _)| k.to_owned())) + fn iter<'a>( + &'a self, + key: &[u8], + reverse: bool, + ) -> Result<Box<dyn Iterator<Item = Result<Vec<u8>>> + '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()))) + }) } } |