use aws_config::BehaviorVersion;
use aws_config::sts::AssumeRoleProvider;
use aws_sdk_dynamodb::Client as DynamoClient;
pub async fn build_ddb_client(
role_arn: Option<String>,
region: Option<String>,
session_name: &str,
external_id: Option<String>,
_duration_seconds: Option<u64>,
) -> Result<DynamoClient, Box<dyn std::error::Error>> {
let mut config_loader = aws_config::defaults(BehaviorVersion::latest());
if let Some(ref reg) = region {
config_loader = config_loader.region(aws_config::Region::new(reg.clone()));
}
let base_config = config_loader.load().await;
let role_arn = match role_arn {
Some(arn) => arn,
None => return Ok(DynamoClient::new(&base_config)),
};
let mut provider_builder = AssumeRoleProvider::builder(role_arn)
.session_name(session_name)
.configure(&base_config);
if let Some(ext_id) = external_id {
provider_builder = provider_builder.external_id(ext_id);
}
let provider = provider_builder.build().await;
let assumed_config = aws_config::defaults(BehaviorVersion::latest())
.credentials_provider(provider)
.region(base_config.region().cloned())
.load()
.await;
Ok(DynamoClient::new(&assumed_config))
}