pub const DEFAULT_LIMIT: i64 = 50;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct Window {
pub limit: i64,
pub offset: i64,
}
impl Window {
#[must_use]
pub fn resolve(limit: i64, offset: i64) -> Self {
Self {
limit: limit.max(1),
offset: offset.max(0),
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn a_nonsense_window_is_clamped_rather_than_refused() {
for (limit, expected) in [(50, 50), (1, 1), (0, 1), (-5, 1)] {
assert_eq!(Window::resolve(limit, 0).limit, expected, "limit={limit}");
}
for (offset, expected) in [(0, 0), (7, 7), (-7, 0)] {
assert_eq!(
Window::resolve(50, offset).offset,
expected,
"offset={offset}"
);
}
}
}