ahri_tre_protocol/
pagination.rs1use serde::{Deserialize, Serialize};
2
3pub const DEFAULT_PAGE_LIMIT: u16 = 100;
4pub const MAX_PAGE_LIMIT: u16 = 500;
5
6#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
7pub struct PageRequest {
8 #[serde(default, skip_serializing_if = "Option::is_none")]
9 pub cursor: Option<String>,
10 #[serde(default = "default_page_limit")]
11 pub limit: u16,
12}
13
14impl Default for PageRequest {
15 fn default() -> Self {
16 Self {
17 cursor: None,
18 limit: DEFAULT_PAGE_LIMIT,
19 }
20 }
21}
22
23impl PageRequest {
24 pub fn validate(&self) -> Result<(), String> {
25 if self.limit == 0 {
26 return Err("page limit must be greater than zero".to_string());
27 }
28 if self.limit > MAX_PAGE_LIMIT {
29 return Err(format!("page limit must be at most {MAX_PAGE_LIMIT}"));
30 }
31 Ok(())
32 }
33}
34
35#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
36pub struct Page<T> {
37 pub items: Vec<T>,
38 #[serde(default, skip_serializing_if = "Option::is_none")]
39 pub next_cursor: Option<String>,
40}
41
42const fn default_page_limit() -> u16 {
43 DEFAULT_PAGE_LIMIT
44}