aboutsummaryrefslogtreecommitdiff
path: root/database/src/iterator.rs
diff options
context:
space:
mode:
Diffstat (limited to 'database/src/iterator.rs')
-rw-r--r--database/src/iterator.rs70
1 files changed, 0 insertions, 70 deletions
diff --git a/database/src/iterator.rs b/database/src/iterator.rs
deleted file mode 100644
index 2db349b..0000000
--- a/database/src/iterator.rs
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- This file is part of jellything (https://codeberg.org/metamuffin/jellything)
- which is licensed under the GNU Affero General Public License (version 3); see /COPYING.
- Copyright (C) 2025 metamuffin <metamuffin.org>
-*/
-
-use crate::backends::ReadTransaction;
-use anyhow::Result;
-use std::{borrow::Cow, ops::Range};
-
-pub struct PrefixIterator<'a> {
- db: &'a dyn ReadTransaction,
- prefix: &'a [u8],
- cursor: Cow<'a, [u8]>,
-}
-impl Iterator for PrefixIterator<'_> {
- type Item = Result<Vec<u8>>;
- fn next(&mut self) -> Option<Self::Item> {
- match self.db.next(&self.cursor) {
- Err(e) => Some(Err(e)),
- Ok(None) => None,
- Ok(Some(next)) => {
- if next.starts_with(self.prefix) {
- self.cursor = next.clone().into();
- Some(Ok(next))
- } else {
- None
- }
- }
- }
- }
-}
-
-pub struct RangeIterator<'a> {
- db: &'a dyn ReadTransaction,
- range: Range<Cow<'a, [u8]>>,
-}
-impl Iterator for RangeIterator<'_> {
- type Item = Result<Vec<u8>>;
- fn next(&mut self) -> Option<Self::Item> {
- match self.db.next(&self.range.start) {
- Err(e) => Some(Err(e)),
- Ok(None) => None,
- Ok(Some(next)) => {
- if next.as_slice() < self.range.end.as_ref() {
- self.range.start = next.clone().into();
- Some(Ok(next))
- } else {
- None
- }
- }
- }
- }
-}
-impl DoubleEndedIterator for RangeIterator<'_> {
- fn next_back(&mut self) -> Option<Self::Item> {
- match self.db.prev(&self.range.end) {
- Err(e) => Some(Err(e)),
- Ok(None) => None,
- Ok(Some(prev)) => {
- if prev.as_slice() >= self.range.start.as_ref() {
- self.range.end = prev.clone().into();
- Some(Ok(prev))
- } else {
- None
- }
- }
- }
- }
-}