use crate::storage::page::builder::Page;
use crate::storage::record::Record;
#[derive(Debug, PartialEq)]
pub enum PageLookupResult<'page> {
Found(&'page Record),
NotFound,
NotVisible, }
impl Page {
pub fn get(&self, id: &str, snapshot_seqno: u64) -> PageLookupResult<'_> {
if id < self.header.min_id.as_str() || id > self.header.max_id.as_str() {
return PageLookupResult::NotFound;
}
match self.records.binary_search_by(|r| r.id.as_str().cmp(id)) {
Ok(idx) => {
let record = &self.records[idx];
if record.seqno <= snapshot_seqno {
PageLookupResult::Found(record)
} else {
PageLookupResult::NotVisible
}
}
Err(_) => PageLookupResult::NotFound,
}
}
}