openmina_node_common/service/archive/
aws.rs

1use 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}