use crate::db::executor::GroupedPaginationWindow;
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub(in crate::db::executor) struct GroupedContinuationCapabilities {
applied: bool,
resume_boundary_applied: bool,
selection_bound_applied: bool,
}
impl GroupedContinuationCapabilities {
#[must_use]
pub(in crate::db::executor) const fn from_window(
applied: bool,
window: &GroupedPaginationWindow,
) -> Self {
Self {
applied,
resume_boundary_applied: window.resume_boundary().is_some(),
selection_bound_applied: window.selection_bound().is_some(),
}
}
#[must_use]
pub(in crate::db::executor) const fn applied(self) -> bool {
self.applied
}
#[must_use]
pub(in crate::db::executor) const fn resume_boundary_applied(self) -> bool {
self.resume_boundary_applied
}
#[must_use]
pub(in crate::db::executor) const fn selection_bound_applied(self) -> bool {
self.selection_bound_applied
}
}
#[cfg(test)]
mod tests {
use crate::db::executor::{GroupedContinuationCapabilities, GroupedPaginationWindow};
#[test]
fn grouped_continuation_capabilities_mark_initial_window_as_unapplied() {
let window = GroupedPaginationWindow {
limit: Some(3),
initial_offset_for_page: 2,
selection_bound: Some(6),
resume_initial_offset: 2,
resume_boundary: None,
};
let capabilities = GroupedContinuationCapabilities::from_window(false, &window);
assert!(!capabilities.applied());
assert!(!capabilities.resume_boundary_applied());
assert!(capabilities.selection_bound_applied());
}
#[test]
fn grouped_continuation_capabilities_mark_resume_window_as_applied() {
let window = GroupedPaginationWindow {
limit: Some(3),
initial_offset_for_page: 0,
selection_bound: Some(4),
resume_initial_offset: 2,
resume_boundary: Some(crate::value::Value::List(Vec::new())),
};
let capabilities = GroupedContinuationCapabilities::from_window(true, &window);
assert!(capabilities.applied());
assert!(capabilities.resume_boundary_applied());
assert!(capabilities.selection_bound_applied());
}
}