mangadex_api/
traits.rs

1use std::borrow::Cow;
2
3use serde::Serialize;
4
5pub mod from_response;
6
7pub trait UrlSerdeQS {
8    fn query_qs<T: Serialize>(self, query: &T) -> Self;
9}
10
11impl UrlSerdeQS for url::Url {
12    fn query_qs<T: Serialize>(mut self, query: &T) -> Self {
13        self.set_query(Some(
14            &serde_qs::to_string(query).expect("failed to encode query string"),
15        ));
16        self
17    }
18}
19
20pub trait FromResponse: Sized {
21    type Response;
22
23    fn from_response(res: Self::Response) -> Self;
24}
25
26pub trait Endpoint {
27    type Query: Serialize;
28    type Body: Serialize;
29    type Response: FromResponse;
30
31    fn method(&self) -> reqwest::Method {
32        reqwest::Method::GET
33    }
34
35    fn path(&'_ self) -> Cow<'_, str>;
36
37    fn require_auth(&self) -> bool {
38        false
39    }
40
41    fn query(&self) -> Option<&Self::Query> {
42        None
43    }
44
45    fn body(&self) -> Option<&Self::Body> {
46        None
47    }
48
49    fn multipart(&self) -> Option<reqwest::multipart::Form> {
50        None
51    }
52}
53
54pub(crate) mod bool_serde {
55    use serde::Serializer;
56
57    pub fn option_bool_ser<S: Serializer>(
58        value: &Option<bool>,
59        serializer: S,
60    ) -> Result<S::Ok, S::Error> {
61        match value {
62            Some(bool_) => bool_ser(bool_, serializer),
63            None => serializer.serialize_none(),
64        }
65    }
66    pub fn bool_ser<S: Serializer>(value: &bool, serializer: S) -> Result<S::Ok, S::Error> {
67        match value {
68            true => serializer.serialize_i8(1),
69            false => serializer.serialize_i8(0),
70        }
71    }
72}