update_informer/http_client/
ureq.rs

1use crate::{
2    http_client::{HeaderMap, HttpClient},
3    Result,
4};
5use serde::de::DeserializeOwned;
6use std::time::Duration;
7use ureq::Agent;
8
9pub struct UreqHttpClient;
10
11impl HttpClient for UreqHttpClient {
12    fn get<T: DeserializeOwned>(url: &str, timeout: Duration, headers: HeaderMap) -> Result<T> {
13        let config = Agent::config_builder().timeout_global(Some(timeout));
14
15        #[cfg(all(feature = "native-tls", not(feature = "rustls-tls")))]
16        let config = config.tls_config(
17            ureq::tls::TlsConfig::builder()
18                .provider(ureq::tls::TlsProvider::NativeTls)
19                .build(),
20        );
21
22        let agent: Agent = config.build().into();
23        let mut req = agent.get(url);
24
25        for (header, value) in headers {
26            req = req.header(header, value);
27        }
28
29        let json = req.call()?.body_mut().read_json()?;
30
31        Ok(json)
32    }
33}