update_informer/http_client/
mod.rs1use crate::Result;
2use serde::de::DeserializeOwned;
3use std::time::Duration;
4
5#[cfg(feature = "ureq")]
6mod ureq;
7#[cfg(all(feature = "ureq", not(feature = "reqwest")))]
8pub use crate::http_client::ureq::UreqHttpClient;
9#[cfg(all(feature = "ureq", not(feature = "reqwest")))]
10pub type DefaultHttpClient = UreqHttpClient;
11
12#[cfg(feature = "reqwest")]
13mod reqwest;
14#[cfg(all(feature = "reqwest", not(feature = "ureq")))]
15pub use crate::http_client::reqwest::ReqwestHttpClient;
16#[cfg(all(feature = "reqwest", not(feature = "ureq")))]
17pub type DefaultHttpClient = ReqwestHttpClient;
18
19#[cfg(all(not(feature = "ureq"), not(feature = "reqwest")))]
20mod undefined;
21#[cfg(all(not(feature = "ureq"), not(feature = "reqwest")))]
22pub use crate::http_client::undefined::UndefinedHttpClient;
23#[cfg(all(not(feature = "ureq"), not(feature = "reqwest")))]
24pub type DefaultHttpClient = UndefinedHttpClient;
25
26mod headers;
27pub use headers::HeaderMap;
28
29pub struct GenericHttpClient<'a, T: HttpClient> {
31 _inner: T,
32 timeout: Duration,
33 headers: HeaderMap<'a>,
34}
35
36pub(crate) fn new<'a, T: HttpClient>(client: T, timeout: Duration) -> GenericHttpClient<'a, T> {
37 GenericHttpClient {
38 _inner: client,
39 timeout,
40 headers: HeaderMap::new(),
41 }
42}
43
44impl<'a, T: HttpClient> GenericHttpClient<'a, T> {
45 pub fn add_header(mut self, key: &'a str, value: &'a str) -> Self {
46 self.headers.add(key, value);
47 self
48 }
49
50 pub fn get<D: DeserializeOwned>(self, url: &str) -> Result<D> {
51 T::get(url, self.timeout, self.headers)
52 }
53}
54
55pub trait HttpClient {
56 fn get<T: DeserializeOwned>(url: &str, timeout: Duration, headers: HeaderMap) -> Result<T>;
57}