openmina_node_common/service/archive/
aws.rs1use std::env;
2
3use super::Error;
4
5pub(crate) struct ArchiveAWSClient {
6 client: aws_sdk_s3::Client,
7 bucket_name: String,
8 bucket_path: String,
9}
10
11impl ArchiveAWSClient {
12 pub async fn new() -> Result<Self, Error> {
13 let config = aws_config::load_from_env().await;
14 let bucket_name = env::var("OPENMINA_AWS_BUCKET_NAME").map_err(|_| {
15 Error::EnvironmentVariableNotSet("OPENMINA_AWS_BUCKET_NAME".to_string())
16 })?;
17 let bucket_path = env::var("OPENMINA_AWS_BUCKET_PATH").map_err(|_| {
18 Error::EnvironmentVariableNotSet("OPENMINA_AWS_BUCKET_PATH".to_string())
19 })?;
20 Ok(Self {
21 client: aws_sdk_s3::Client::new(&config),
22 bucket_name,
23 bucket_path,
24 })
25 }
26
27 pub async fn upload_block(&self, key: &str, data: &[u8]) -> Result<(), Error> {
28 self.client
29 .put_object()
30 .bucket(self.bucket_name.clone())
31 .key(format!("{}/{}", self.bucket_path, key))
32 .body(data.to_vec().into())
33 .send()
34 .await
35 .map_err(|e| Error::UploadError(e.to_string()))?;
36
37 Ok(())
38 }
39}