use ureq::{Agent, tls::{TlsConfig, TlsProvider}};
use crate::{Read, RequestConfig, Result};
static USER_AGENT: &str = concat!(env!("CARGO_PKG_NAME"), "/", env!("CARGO_PKG_VERSION"));
pub(crate) fn new_agent(use_tls: bool, tls_provider: Option<TlsProvider>) -> Agent {
let mut builder = Agent::config_builder()
.user_agent(USER_AGENT);
if use_tls {
let provider = tls_provider.unwrap_or(TlsProvider::Rustls);
builder = builder.tls_config(
TlsConfig::builder()
.provider(provider)
.build()
);
}
builder.build().into()
}
pub(crate) fn fetch(agent: &Agent, url: &str) -> Result<Box<dyn Read>> {
let response = agent.get(url).call()?;
let (_headers, body) = response.into_parts();
Ok(Box::new(body.into_reader()))
}
pub(crate) fn fetch_with_config(agent: &Agent, url: &str, config: &RequestConfig) -> Result<Box<dyn Read>> {
let mut request = agent.get(url);
for (key, value) in &config.headers {
request = request.header(key, value);
}
let response = request.call()?;
let (_headers, body) = response.into_parts();
Ok(Box::new(body.into_reader()))
}