iceberg_catalog_s3tables/
utils.rs1use std::collections::HashMap;
19
20use aws_config::{BehaviorVersion, Region, SdkConfig};
21use aws_sdk_s3tables::config::Credentials;
22
23pub const AWS_PROFILE_NAME: &str = "profile_name";
25pub const AWS_REGION_NAME: &str = "region_name";
27pub const AWS_ACCESS_KEY_ID: &str = "aws_access_key_id";
29pub const AWS_SECRET_ACCESS_KEY: &str = "aws_secret_access_key";
31pub const AWS_SESSION_TOKEN: &str = "aws_session_token";
33
34pub(crate) async fn create_sdk_config(
37 properties: &HashMap<String, String>,
38 endpoint_url: Option<String>,
39) -> SdkConfig {
40 let mut config = aws_config::defaults(BehaviorVersion::latest());
41
42 if properties.is_empty() {
43 return config.load().await;
44 }
45
46 if let Some(endpoint_url) = endpoint_url {
47 config = config.endpoint_url(endpoint_url);
48 }
49
50 if let (Some(access_key), Some(secret_key)) = (
51 properties.get(AWS_ACCESS_KEY_ID),
52 properties.get(AWS_SECRET_ACCESS_KEY),
53 ) {
54 let session_token = properties.get(AWS_SESSION_TOKEN).cloned();
55 let credentials_provider =
56 Credentials::new(access_key, secret_key, session_token, None, "properties");
57
58 config = config.credentials_provider(credentials_provider)
59 };
60
61 if let Some(profile_name) = properties.get(AWS_PROFILE_NAME) {
62 config = config.profile_name(profile_name);
63 }
64
65 if let Some(region_name) = properties.get(AWS_REGION_NAME) {
66 let region = Region::new(region_name.clone());
67 config = config.region(region);
68 }
69
70 config.load().await
71}