titan_types/
pagination.rs

1use serde::{Deserialize, Serialize};
2
3#[derive(Debug, Clone, Copy, Serialize, Deserialize)]
4pub struct Pagination {
5    #[serde(default = "default_skip")]
6    pub skip: u64,
7    #[serde(default = "default_limit")]
8    pub limit: u64,
9}
10
11impl Default for Pagination {
12    fn default() -> Self {
13        Pagination {
14            skip: 0,
15            limit: u64::MAX,
16        }
17    }
18}
19
20fn default_skip() -> u64 {
21    0
22}
23
24fn default_limit() -> u64 {
25    u64::MAX
26}
27
28impl Into<Pagination> for (u64, u64) {
29    fn into(self) -> Pagination {
30        Pagination {
31            skip: self.0,
32            limit: self.1,
33        }
34    }
35}
36
37impl Into<(u64, u64)> for Pagination {
38    fn into(self) -> (u64, u64) {
39        (self.skip, self.limit)
40    }
41}
42
43#[derive(Debug, Clone, Serialize, Deserialize)]
44pub struct PaginationResponse<T> {
45    pub items: Vec<T>,
46    pub offset: u64,
47}