use crate::db::{
access::LoweredKey,
cursor::{IndexRangeCursorAnchor, ValidatedInEnvelopeIndexRangeCursorAnchor},
index::RawIndexKey,
};
#[derive(Clone, Debug, Eq, PartialEq)]
pub(in crate::db) struct LogicalKeyHandle {
lowered_key: LoweredKey,
}
impl LogicalKeyHandle {
#[must_use]
pub(in crate::db) const fn from_lowered(lowered_key: LoweredKey) -> Self {
Self { lowered_key }
}
#[must_use]
pub(in crate::db) const fn as_lowered(&self) -> &LoweredKey {
&self.lowered_key
}
}
#[derive(Clone, Debug, Eq, PartialEq)]
pub(in crate::db) struct RangeToken {
anchor: LogicalKeyHandle,
}
impl RangeToken {
#[must_use]
pub(in crate::db) const fn new(anchor: LogicalKeyHandle) -> Self {
Self { anchor }
}
#[must_use]
pub(in crate::db) const fn anchor(&self) -> &LogicalKeyHandle {
&self.anchor
}
}
#[must_use]
pub(in crate::db) fn cursor_anchor_from_raw_index_key(
index_key: &RawIndexKey,
) -> IndexRangeCursorAnchor {
IndexRangeCursorAnchor::new(index_key.as_bytes().to_vec())
}
#[must_use]
pub(in crate::db) fn range_token_from_validated_cursor_anchor(
anchor: &ValidatedInEnvelopeIndexRangeCursorAnchor,
) -> RangeToken {
RangeToken::new(LogicalKeyHandle::from_lowered(anchor.lowered_key().clone()))
}
#[must_use]
pub(in crate::db) const fn range_token_anchor_key(range_token: &RangeToken) -> &LoweredKey {
range_token.anchor().as_lowered()
}