update_informer/http_client/
mod.rs

1use 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
29/// An HTTP client to send requests to the registry.
30pub 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}