diff --git a/Cargo.toml b/Cargo.toml index b2a92a8..e62f667 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -6,7 +6,7 @@ license = "MIT" description = "Library for managing soaricarus storage" [dependencies] -aws-config = { version = "1.9.0" } +aws-config = { version = "1.9.0", features = ["behavior-version-latest"] } aws-sdk-s3 = { version = "1.138.1" } time = "0.3.53" tokio = { version = "1.53.0", features = ["full"] } diff --git a/src/config.rs b/src/config.rs new file mode 100644 index 0000000..b2fa8e7 --- /dev/null +++ b/src/config.rs @@ -0,0 +1,15 @@ + +/* +pub async fn init_config(url: &str, region: String) -> Result { + let r = region.as_str(); + let config = aws_config::from_env().endpoint_url(url).region(r).load().await; + + Ok(config) +} +*/ + +pub struct Config { + pub url: String, + pub bucket: String, + pub region: String, +} diff --git a/src/lib.rs b/src/lib.rs index b93cf3f..fc507d1 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,3 +1,67 @@ +pub mod config; + + +// use aws_sdk_s3::config::*; + +#[derive(Default)] +pub struct Data { + pub filepath: String, + pub raw_data: Vec +} + + +pub struct Labyrinth { + pub config: config::Config, +} + +pub enum Error { + Info(String), + SError(aws_sdk_s3::operation::put_object::PutObjectError) +} + +impl Labyrinth { + pub async fn upload(&self, file_key: &str, data: &Data) -> Result { + // let config = aws_config::from_env().endpoint_url(&self.config.url).region("").load().await; + let config = aws_config::load_from_env().await; + let client = aws_sdk_s3::Client::new(&config); + + let data_content = if data.raw_data.is_empty() { + match tokio::fs::read(&data.filepath).await { + Ok(content) => content, + Err(err) => { + eprintln!("Error: {err:?}"); + Vec::new() + } + } + } else { + data.raw_data.to_owned() + }; + + let body = aws_sdk_s3::primitives::SdkBody::from(data_content); + let b_stream = aws_sdk_s3::primitives::ByteStream::from(body); + match client + .put_object() + .bucket(self.config.bucket.clone()) + .key(file_key) + .body(b_stream) + .send() + .await { + Ok(response) => { + println!("Response: {response:?}"); + println!("Uploaded"); + + Ok(response) + } + Err(err) => { + eprintln!("Error: {err:?}"); + // aws_sdk_s3::error::SdkError + Err(Error::Info(err.to_string())) + } + } + } +} + + pub fn add(left: u64, right: u64) -> u64 { left + right }