Skip to main content

anycms_core/
pagination.rs

1use serde::{Deserialize, Serialize};
2
3/// Pagination metadata for list responses
4#[derive(Debug, Clone, Serialize, Deserialize)]
5#[serde(rename_all = "camelCase")]
6pub struct ResultPagination {
7    pub total: i64,
8    pub page: i64,
9    pub page_size: i64,
10    pub current_page: i64,
11}
12
13impl ResultPagination {
14    /// Create new pagination metadata
15    pub fn new(total: i64, page: i64, page_size: i64) -> Self {
16        Self {
17            total,
18            page,
19            page_size,
20            current_page: page,
21        }
22    }
23
24    /// Compute total number of pages
25    pub fn total_pages(&self) -> i64 {
26        if self.page_size <= 0 {
27            return 0;
28        }
29        (self.total + self.page_size - 1) / self.page_size
30    }
31
32    /// Whether there is a next page
33    pub fn has_next(&self) -> bool {
34        self.page < self.total_pages()
35    }
36
37    /// Whether there is a previous page
38    pub fn has_prev(&self) -> bool {
39        self.page > 1
40    }
41}