Skip to main content

sqlx_data_params/
serial.rs

1use crate::{IntoParams, Params};
2
3#[derive(Clone, Debug)]
4pub struct SerialParams {
5    page: u32,
6    page_size: u32,
7}
8
9impl Default for SerialParams {
10    fn default() -> Self {
11        Self {
12            page: 1,
13            page_size: 20,
14        }
15    }
16}
17
18impl SerialParams {
19    pub fn new(page: u32, per_page: u32) -> Self {
20        Self {
21            page: page.max(1),
22            page_size: per_page.max(1),
23        }
24    }
25
26    #[inline]
27    pub fn page(&self) -> u32 {
28        self.page
29    }
30
31    #[inline]
32    pub fn per_page(&self) -> u32 {
33        self.page_size
34    }
35
36    #[inline]
37    pub fn offset(&self) -> u32 {
38        (self.page.saturating_sub(1)).saturating_mul(self.page_size)
39    }
40
41    #[inline]
42    pub fn limit(&self) -> u32 {
43        self.page_size
44    }
45}
46
47impl IntoParams for SerialParams {
48    fn into_params(self) -> Params {
49        let page_size = self.page_size;
50        let offset = self.offset();
51        Params {
52            filters: None,
53            search: None,
54            sort_by: None,
55            pagination: Some(crate::pagination::Pagination::Serial(self)),
56            limit: Some(crate::pagination::LimitParam(page_size)),
57            offset: Some(crate::pagination::OffsetParam(offset)),
58        }
59    }
60}