asoiaf_api/requester/
pagination.rs1use 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}