use std::sync::Arc;
use std::time::Duration;
use fetch::HttpClient;
use fetch::options::{ConnectionKeepAlive, ConnectionLifetime, ConnectionPoolOptions, Http2Options};
use fetch::tls::TlsOptions;
use http::Version;
use rustls::client::danger::ServerCertVerifier;
use rustls::crypto::CryptoProvider;
use tracing::info;
#[path = "util/utils.rs"]
mod utils;
fn custom_verifier(provider: Arc<CryptoProvider>) -> Arc<dyn ServerCertVerifier> {
Arc::new(
rustls_platform_verifier::Verifier::new(provider)
.expect("the platform certificate verifier must initialize with the supplied crypto provider"),
)
}
#[tokio::main]
async fn main() -> Result<(), ohno::AppError> {
utils::init_tracing();
let client = HttpClient::builder_tokio(fetch::tokio::TokioDeps::default())
.tls_options(TlsOptions::builder_rustls().server_certificate_verifier(custom_verifier).build())
.connection_keep_alive(ConnectionKeepAlive::active_and_idle_connections(
Duration::from_secs(30), Duration::from_secs(5), ))
.connection_pool_options(
ConnectionPoolOptions::default()
.max_connections(10)
.connection_idle_timeout(Duration::from_secs(5))
.connection_lifetime(ConnectionLifetime::fixed(Duration::from_mins(1))),
)
.http2_options(Http2Options::default().initial_max_send_streams(100))
.supported_http_versions(&[Version::HTTP_11, Version::HTTP_2])
.standard_pipeline(|pipeline, _context| {
pipeline.attempt_timeout(|timeout| timeout.timeout(Duration::from_secs(3)))
})
.build();
info!("Advanced HTTP client created successfully");
drop(client);
Ok(())
}