use std::time::Duration;
use clap::Args;
use humantime::parse_duration;
use crate::http::client::{ClientOptions, HttpVersion};
#[derive(Args, Clone, Debug, Eq, PartialEq)]
pub struct HttpClientCli {
#[clap(env, long, default_value = "5s", value_parser = parse_duration)]
pub http_client_timeout_connect: Duration,
#[clap(env, long, default_value = "15s", value_parser = parse_duration)]
pub http_client_timeout_read: Duration,
#[clap(env, long, default_value = "60s", value_parser = parse_duration)]
pub http_client_timeout: Duration,
#[clap(env, long, value_parser = parse_duration)]
pub http_client_pool_idle_timeout: Option<Duration>,
#[clap(env, long)]
pub http_client_pool_idle_max: Option<usize>,
#[clap(env, long, value_parser = parse_duration)]
pub http_client_tcp_keepalive_delay: Option<Duration>,
#[clap(env, long, value_parser = parse_duration)]
pub http_client_tcp_keepalive_interval: Option<Duration>,
#[clap(env, long)]
pub http_client_tcp_keepalive_retries: Option<u32>,
#[clap(env, long, value_parser = parse_duration)]
pub http_client_http2_keepalive: Option<Duration>,
#[clap(env, long, value_parser = parse_duration)]
pub http_client_http2_keepalive_timeout: Option<Duration>,
#[clap(env, long)]
pub http_client_http2_keepalive_idle: bool,
#[clap(env, long, default_value = "all")]
pub http_client_http_version: HttpVersion,
#[clap(env, long, value_parser = parse_duration, default_value = "500ms")]
pub http_client_happy_eyeballs_timeout: Duration,
#[clap(env, long)]
pub http_client_tls_fixed_name: Option<String>,
}
impl From<&HttpClientCli> for ClientOptions {
fn from(c: &HttpClientCli) -> Self {
Self {
timeout_connect: c.http_client_timeout_connect,
timeout_read: c.http_client_timeout_read,
timeout: c.http_client_timeout,
pool_idle_timeout: c.http_client_pool_idle_timeout,
pool_idle_max: c.http_client_pool_idle_max,
tcp_keepalive_delay: c.http_client_tcp_keepalive_delay,
tcp_keepalive_interval: c.http_client_tcp_keepalive_interval,
tcp_keepalive_retries: c.http_client_tcp_keepalive_retries,
http2_keepalive: c.http_client_http2_keepalive,
http2_keepalive_timeout: c.http_client_http2_keepalive_timeout,
http2_keepalive_idle: c.http_client_http2_keepalive_idle,
happy_eyeballs_timeout: c.http_client_happy_eyeballs_timeout,
http_version: c.http_client_http_version,
user_agent: "ic-bn-lib".into(),
tls_config: None,
tls_fixed_name: c.http_client_tls_fixed_name.clone(),
dns_overrides: vec![],
}
}
}