diff --git a/src/lib.rs b/src/lib.rs index 8c55fb8..11270d3 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -16,6 +16,31 @@ pub async fn load_data(filepath: &str) -> Result, std::io::Error> { tokio::fs::read(filepath).await } +pub async fn init_client(config: &config::Config) -> aws_sdk_s3::Client { + let credentials = Credentials::new( + config.access_key_id.clone(), + config.secret_key.clone(), + None, + None, + "maze", + ); + + let region = Region::new(config.region.to_string()); + let config = aws_config::from_env() + .region(region) + .credentials_provider(credentials) + .endpoint_url(config.url.clone()) + .load() + .await; + + let s3_config = aws_sdk_s3::config::Builder::from(&config) + .force_path_style(true) + .build(); + + let client = aws_sdk_s3::Client::from_conf(s3_config); + client +} + #[derive(Debug)] pub enum Error { Info(String), @@ -28,32 +53,7 @@ impl Labyrinth { file_key: &str, data: &Data, ) -> Result { - // 1. Create credentials - let credentials = Credentials::new( - self.config.access_key_id.clone(), - self.config.secret_key.clone(), - None, // session_token - None for long-term credentials - None, // expires_after - None for long-term credentials - "maze", // provider_name - just a label - ); - - // 2. Create region - let region = Region::new(self.config.region.to_string()); - let config = aws_config::from_env() - .region(region) - .credentials_provider(credentials) - .endpoint_url(self.config.url.clone()) - .load() - .await; - - let s3_config = aws_sdk_s3::config::Builder::from(&config) - .force_path_style(true) // 👈 CRITICAL for Garage/MinIO/LocalStack - .build(); - - // let config = aws_config::load_from_env().await; - // let client = aws_sdk_s3::Client::new(&config); - let client = aws_sdk_s3::Client::from_conf(s3_config); - + let client = init_client(&self.config).await; let data_content = if data.raw_data.is_empty() { match load_data(&data.filepath).await { Ok(content) => content,