update_informer/http_client/
ureq.rs1use 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}