use core::time::Duration;
use crate::{
auth::{self, Credentials},
config::{Config, TransferConfig},
error::Result,
};
#[derive(Debug, Clone)]
pub struct S3Client {
pub(crate) config: Config,
pub(crate) creds: Credentials,
pub(crate) http: reqwest::Client,
}
impl S3Client {
#[inline]
#[must_use]
pub const fn config(&self) -> &Config {
&self.config
}
#[inline]
#[expect(clippy::unused_async, reason = "API is async-ready for future credential refresh")]
pub async fn new(config: Config) -> Result<Self> {
let creds = auth::resolve(&config.credentials)?;
let http = reqwest::Client::builder()
.pool_max_idle_per_host(TransferConfig::MAX_IDLE_CONNECTIONS)
.tcp_keepalive(Duration::from_secs(30))
.pool_idle_timeout(Duration::from_secs(90))
.tcp_nodelay(true)
.http1_only()
.build()?;
Ok(Self {
config,
creds,
http,
})
}
}