termii_rust/common/
pagination.rs1use async_trait::async_trait;
2
3use crate::common::errors;
4
5pub trait PaginatedResource {
6 type Item;
7
8 fn _get(&self, page: &str) -> Result<Vec<Self::Item>, errors::HttpError>;
9
10 fn all(&self) -> Result<Vec<Self::Item>, errors::HttpError> {
11 let mut current_page = 1usize;
12 let mut result: Vec<Self::Item> = Vec::new();
13
14 loop {
15 let response = self._get(current_page.to_string().as_str())?;
16
17 if response.len() == 0 {
18 break;
19 }
20 result.extend(response);
21
22 current_page += 1;
23 }
24
25 Ok(result)
26 }
27}
28
29#[async_trait]
30pub trait PaginatedResourceAsync {
31 type Item: Send;
32
33 async fn _get(&self, page: &str) -> Result<Vec<Self::Item>, errors::HttpError>;
34
35 async fn all(&self) -> Result<Vec<Self::Item>, errors::HttpError> {
36 let mut current_page = 1usize;
37 let mut result: Vec<Self::Item> = Vec::new();
38
39 loop {
40 let response = self._get(current_page.to_string().as_str()).await?;
41
42 if response.len() == 0 {
43 break;
44 }
45 result.extend(response);
46
47 current_page += 1;
48 }
49
50 Ok(result)
51 }
52}