use std::io::Write;
use core::time;
use crate::utils;
use crate::header;
pub type DefaultTimer = async_timer::oneshot::Timer;
#[cfg(feature = "rustls-on")]
pub type DefaultConnector = crate::connector::rustls::HttpsConnector;
#[cfg(not(feature = "rustls-on"))]
pub type DefaultConnector = crate::connector::HttpConnector;
pub trait Config {
type Connector: hyper::service::Service<hyper::Uri> + Default + Clone + Send + Sync;
type Timer: async_timer::oneshot::Oneshot;
#[inline]
fn decompress() -> bool {
true
}
#[inline]
fn timeout() -> time::Duration {
time::Duration::from_secs(30)
}
fn default_user_agent(request: &mut super::request::Request) {
if !request.headers().contains_key(header::USER_AGENT) {
request.headers_mut().insert(header::USER_AGENT, header::HeaderValue::from_static(concat!("Yukikaze/", env!("CARGO_PKG_VERSION"))));
}
}
#[inline]
fn default_headers(request: &mut super::request::Request) {
Self::default_user_agent(request);
if !request.headers().contains_key(header::HOST) {
let host = request.uri().host().and_then(|host| match request.uri().port().map(|port| port.as_u16()) {
None | Some(80) | Some(443) => header::HeaderValue::from_str(host).ok(),
Some(port) => {
let mut buffer = utils::BytesWriter::with_capacity(host.len() + 5);
let _ = write!(&mut buffer, "{}:{}", host, port);
http::header::HeaderValue::from_maybe_shared(buffer.freeze()).ok()
},
});
if let Some(host) = host {
request.headers_mut().insert(header::HOST, host);
}
}
}
#[inline]
fn max_redirect_num() -> usize {
8
}
#[inline]
fn config_hyper(builder: &mut hyper::client::Builder) -> &mut hyper::client::Builder {
builder
}
}
pub struct DefaultCfg;
impl Config for DefaultCfg {
type Connector = DefaultConnector;
type Timer = DefaultTimer;
}