use std::time::Duration;
use liburing::{Proactor, SubsystemId};
use nexora_proto::TlsClientConfig;
use super::HttpClient;
use crate::{PoolConfig, Result};
#[derive(Debug, Clone)]
pub struct ClientConfig {
pub pool: PoolConfig,
pub connect_timeout: Duration,
pub request_timeout: Duration,
pub max_redirects: usize,
pub follow_redirects: bool,
pub max_header_list_size: usize,
pub max_body_size: usize,
pub max_request_body_size: usize,
pub prefer_http2: bool,
pub http2_prior_knowledge: bool,
pub tls_config: Option<TlsClientConfig>,
pub tls_server_name: Option<String>,
pub dns_servers_csv: Option<String>,
pub net_subsystem: SubsystemId,
pub dns_subsystem: SubsystemId,
}
impl Default for ClientConfig {
fn default() -> Self {
Self {
pool: PoolConfig::default(),
connect_timeout: Duration::from_secs(10),
request_timeout: Duration::from_secs(30),
max_redirects: 5,
follow_redirects: true,
max_header_list_size: 16 * 1024,
max_body_size: 16 * 1024 * 1024,
max_request_body_size: usize::MAX,
prefer_http2: true,
http2_prior_knowledge: false,
tls_config: None,
tls_server_name: None,
dns_servers_csv: None,
net_subsystem: SubsystemId::new_unchecked(1),
dns_subsystem: SubsystemId::new_unchecked(2),
}
}
}
#[derive(Debug, Clone, Default)]
pub struct ClientBuilder {
config: ClientConfig,
}
impl ClientBuilder {
pub fn new() -> Self {
Self::default()
}
pub fn build(self, proactor: &mut Proactor) -> Result<HttpClient> {
HttpClient::new(proactor, self.config)
}
}