pub const DEFAULT_PAGE_SIZE: usize = 50;
pub const MAX_PAGE_SIZE: usize = 100;
pub fn resolve_page_size(requested: Option<i32>) -> usize {
match requested {
Some(size) if size > 0 => (size as usize).min(MAX_PAGE_SIZE),
_ => DEFAULT_PAGE_SIZE,
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_absent_and_non_positive_use_the_default() {
assert_eq!(resolve_page_size(None), DEFAULT_PAGE_SIZE);
assert_eq!(resolve_page_size(Some(0)), DEFAULT_PAGE_SIZE);
assert_eq!(resolve_page_size(Some(-1)), DEFAULT_PAGE_SIZE);
assert_eq!(resolve_page_size(Some(i32::MIN)), DEFAULT_PAGE_SIZE);
}
#[test]
fn test_requested_size_is_honoured_up_to_the_maximum() {
assert_eq!(resolve_page_size(Some(1)), 1);
assert_eq!(resolve_page_size(Some(MAX_PAGE_SIZE as i32)), MAX_PAGE_SIZE);
}
#[test]
fn test_oversized_requests_are_clamped_not_rejected() {
assert_eq!(
resolve_page_size(Some(MAX_PAGE_SIZE as i32 + 1)),
MAX_PAGE_SIZE
);
assert_eq!(resolve_page_size(Some(1000)), MAX_PAGE_SIZE);
assert_eq!(resolve_page_size(Some(i32::MAX)), MAX_PAGE_SIZE);
}
}