use clap::Parser;
use log::info;
use minio::s3::response::BucketExistsResponse;
use minio::s3::types::S3Api;
use minio::s3::{Client, builders::ObjectContent, client::ClientBuilder, creds::StaticProvider};
use std::path::PathBuf;
#[derive(Parser)]
struct Cli {
bucket: String,
object: String,
file: PathBuf,
}
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error + Send + Sync>> {
let args = Cli::parse();
let static_provider = StaticProvider::new(
"Q3AM3UQ867SPQQA43P2F",
"zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG",
None,
);
let client: Client = ClientBuilder::new("https://play.min.io".parse()?)
.provider(Some(Box::new(static_provider)))
.build()?;
let resp: BucketExistsResponse = client.bucket_exists(&args.bucket).send().await.unwrap();
if !resp.exists {
client.create_bucket(&args.bucket).send().await.unwrap();
}
let content = ObjectContent::from(args.file.as_path());
client
.put_object_content(&args.bucket, &args.object, content)
.send()
.await?;
info!(
"Uploaded file at {:?} to {}/{}",
args.file, args.bucket, args.object
);
Ok(())
}