brk_interface/
pagination.rs1use schemars::JsonSchema;
2use serde::Deserialize;
3
4use crate::{Index, deser::de_unquote_usize};
5
6#[derive(Debug, Default, Deserialize, JsonSchema)]
7pub struct PaginationParam {
8 #[schemars(description = "Pagination index")]
9 #[serde(default, alias = "p", deserialize_with = "de_unquote_usize")]
10 pub page: Option<usize>,
11}
12
13impl PaginationParam {
14 const PER_PAGE: usize = 1_000;
15
16 pub fn start(&self, len: usize) -> usize {
17 (self.page.unwrap_or_default() * Self::PER_PAGE).clamp(0, len)
18 }
19
20 pub fn end(&self, len: usize) -> usize {
21 ((self.page.unwrap_or_default() + 1) * Self::PER_PAGE).clamp(0, len)
22 }
23}
24
25#[derive(Debug, Deserialize, JsonSchema)]
26pub struct PaginatedIndexParam {
27 pub index: Index,
28 #[serde(flatten)]
29 pub pagination: PaginationParam,
30}