mina_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("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}