asoiaf_api/requester/
pagination.rs

1use crate::requester::ToUrl;
2
3#[derive(Debug, Clone, Default)]
4pub struct Pagination {
5    pub page: Option<usize>,
6    pub page_size: Option<usize>,
7}
8
9impl ToUrl for Pagination {
10    fn to_url(&self) -> String {
11        let mut url = String::new();
12        if let Some(page) = self.page {
13            url.push_str(&format!("page={}", page));
14        }
15        if let Some(page_size) = self.page_size {
16            if !url.is_empty() {
17                url.push('&');
18            }
19            url.push_str(&format!("pageSize={}", page_size));
20        }
21        url
22    }
23}
24
25impl Pagination {
26    pub fn new(page: usize, page_size: usize) -> Self {
27        Self {
28            page: Some(page),
29            page_size: Some(page_size),
30        }
31    }
32
33    pub fn page(mut self, page: usize) -> Self {
34        self.page = Some(page);
35        self
36    }
37
38    pub fn page_size(mut self, page_size: usize) -> Self {
39        self.page_size = Some(page_size);
40        self
41    }
42
43    pub fn next_page(&mut self) {
44        eprintln!("{:?}", self.page);
45        if let Some(page) = &mut self.page {
46            *page += 1;
47        }
48        eprintln!("{:?}", self.page);
49    }
50}
51
52#[cfg(test)]
53mod tests {
54    use super::*;
55
56    #[test]
57    fn test_pagination() {
58        let pagination = Pagination::new(1, 10);
59        assert_eq!(pagination.to_url(), "page=1&pageSize=10");
60    }
61
62    #[test]
63    fn test_missing_page() {
64        let pagination = Pagination::default().page_size(10);
65        assert_eq!(pagination.to_url(), "pageSize=10");
66    }
67
68    #[test]
69    fn test_missing_page_size() {
70        let pagination = Pagination::default().page(1);
71        assert_eq!(pagination.to_url(), "page=1");
72    }
73
74    #[test]
75    fn test_no_pagination() {
76        let pagination = Pagination::default();
77        assert_eq!(pagination.to_url(), "");
78    }
79
80    #[test]
81    fn test_next_page() {
82        let mut pagination = Pagination::default().page(1);
83        assert_eq!(pagination.to_url(), "page=1");
84        pagination.next_page();
85        assert_eq!(pagination.to_url(), "page=2");
86    }
87}