struct_db/iterator/
primary_iterator_start_with.rs1use crate::common::unwrap_item;
2use crate::SDBItem;
3use std::marker::PhantomData;
4
5pub struct PrimaryIteratorStartWith<'a, 'txn, 'db, T: SDBItem> {
7 pub(crate) range: redb::Range<'a, &'static [u8], &'static [u8]>,
8 pub(crate) start_with: &'a [u8],
9 pub(crate) _marker: PhantomData<(&'db (), &'txn (), T)>,
10}
11
12impl<'a, 'txn, 'db, T: SDBItem> Iterator for PrimaryIteratorStartWith<'a, 'txn, 'db, T> {
13 type Item = T;
14
15 fn next(&mut self) -> Option<Self::Item> {
16 match self.range.next() {
17 Some(Ok((k, v))) => {
18 let k = k.value();
19 if k.starts_with(self.start_with) {
20 unwrap_item(Some(v))
21 } else {
22 None
23 }
24 }
25 _ => None,
26 }
27 }
28}
29
30