1use crate::error::QueryError;
2
3use serde::de::DeserializeOwned;
4
5#[allow(clippy::upper_case_acronyms)]
6#[derive(Debug, Eq, PartialEq)]
7pub enum RequestMethod {
8 GET,
9 POST,
10}
11
12pub trait SingleRequest<P, T>
13where
14 T: DeserializeOwned,
15{
16 fn method(&self) -> RequestMethod;
17 fn path(&self) -> Result<String, QueryError>;
18
19 #[allow(unused_variables)]
20 fn body(&self, csrf_token: Option<String>) -> Result<Option<String>, QueryError> {
21 Ok(None)
22 }
23
24 fn parse(&self, string: &str) -> Result<P, QueryError>;
25 fn extract(&self, page: P) -> T;
26}
27
28pub trait PaginatedRequest<P, T>
29where
30 P: Pagination,
31 T: DeserializeOwned,
32{
33 fn page_request<'a>(&'a self, page: u32) -> Box<dyn SingleRequest<P, T> + 'a>;
34 fn callback(&self, page: u32, pages: u32);
35}
36
37pub trait Pagination {
38 fn pages(&self) -> u32;
39}