mina_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("MINA_AWS_BUCKET_NAME")
15            .map_err(|_| Error::EnvironmentVariableNotSet("MINA_AWS_BUCKET_NAME".to_string()))?;
16        let bucket_path = env::var("MINA_AWS_BUCKET_PATH")
17            .map_err(|_| Error::EnvironmentVariableNotSet("MINA_AWS_BUCKET_PATH".to_string()))?;
18        Ok(Self {
19            client: aws_sdk_s3::Client::new(&config),
20            bucket_name,
21            bucket_path,
22        })
23    }
24
25    pub async fn upload_block(&self, key: &str, data: &[u8]) -> Result<(), Error> {
26        self.client
27            .put_object()
28            .bucket(self.bucket_name.clone())
29            .key(format!("{}/{}", self.bucket_path, key))
30            .body(data.to_vec().into())
31            .send()
32            .await
33            .map_err(|e| Error::UploadError(e.to_string()))?;
34
35        Ok(())
36    }
37}