use std::time::Duration;
use aws_config::{
BehaviorVersion,
timeout::{TimeoutConfig, TimeoutConfigBuilder},
};
use aws_credential_types::Credentials;
use aws_sdk_s3::{
Client,
config::{Region, SharedInterceptor},
};
pub mod bucket;
pub mod error;
pub mod object;
pub mod presigned;
pub use aws_sdk_s3;
pub async fn make_client_with_timeout_default(endpoint_url: Option<String>) -> Client {
make_client_with_timeout(
endpoint_url,
Some(Duration::from_secs(3100)),
Some(Duration::from_secs(60)),
Some(Duration::from_secs(55)),
Some(Duration::from_secs(50)),
)
.await
}
pub async fn make_client_with_timeout(
endpoint_url: Option<String>,
connect_timeout: Option<Duration>,
operation_timeout: Option<Duration>,
operation_attempt_timeout: Option<Duration>,
read_timeout: Option<Duration>,
) -> Client {
let mut timeout_config = TimeoutConfigBuilder::new();
timeout_config
.set_connect_timeout(connect_timeout)
.set_operation_timeout(operation_timeout)
.set_operation_attempt_timeout(operation_attempt_timeout)
.set_read_timeout(read_timeout);
make_client(endpoint_url, Some(timeout_config.build()), None).await
}
pub async fn make_client(
endpoint_url: Option<String>,
timeout_config: Option<TimeoutConfig>,
interceptor: Option<SharedInterceptor>,
) -> Client {
let mut config_loader = aws_config::defaults(BehaviorVersion::latest());
if let Some(timeout_config) = timeout_config {
config_loader = config_loader.timeout_config(timeout_config);
}
let config = config_loader.load().await;
let mut builder = aws_sdk_s3::config::Builder::from(&config);
if let Some(aws_endpoint_url) = endpoint_url {
builder = builder
.endpoint_url(aws_endpoint_url)
.force_path_style(true);
}
if let Some(interceptor) = interceptor {
builder.push_interceptor(interceptor);
}
Client::from_conf(builder.build())
}
pub async fn make_client_with_credentials(
access_key_id: String,
secret_access_key: String,
region: String,
endpoint_url: Option<String>,
timeout_config: Option<TimeoutConfig>,
interceptor: Option<SharedInterceptor>,
) -> Client {
let credentials = Credentials::new(access_key_id, secret_access_key, None, None, "manual");
let mut config_loader = aws_config::defaults(BehaviorVersion::latest())
.credentials_provider(credentials)
.region(Region::new(region));
if let Some(timeout_config) = timeout_config {
config_loader = config_loader.timeout_config(timeout_config);
}
let config = config_loader.load().await;
let mut builder = aws_sdk_s3::config::Builder::from(&config);
if let Some(aws_endpoint_url) = endpoint_url {
builder = builder
.endpoint_url(aws_endpoint_url)
.force_path_style(true);
}
if let Some(interceptor) = interceptor {
builder.push_interceptor(interceptor);
}
Client::from_conf(builder.build())
}