bodhi/
request.rs

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}