//! Use aws-sdk-s3 directly against post3 (without the post3-sdk wrapper). //! Shows the raw configuration needed. //! //! Prerequisites: post3-server running on localhost:9000 //! mise run up && mise run dev //! //! Run: //! cargo run -p post3-sdk --example aws_sdk_direct use post3_sdk::aws_sdk_s3; #[tokio::main] async fn main() -> anyhow::Result<()> { let endpoint = std::env::var("POST3_ENDPOINT") .unwrap_or_else(|_| "http://localhost:9000".to_string()); // Configure aws-sdk-s3 manually for post3 let creds = aws_sdk_s3::config::Credentials::new( "test", // access key (any value works when auth is disabled) "test", // secret key None, // session token None, // expiry "example", // provider name ); let config = aws_sdk_s3::Config::builder() .behavior_version_latest() .region(aws_sdk_s3::config::Region::new("us-east-1")) .endpoint_url(&endpoint) .credentials_provider(creds) .force_path_style(true) // Required: post3 uses path-style, not virtual-hosted .build(); let client = aws_sdk_s3::Client::from_conf(config); // Create bucket println!("Creating bucket..."); client .create_bucket() .bucket("direct-bucket") .send() .await?; // Put object println!("Putting object..."); client .put_object() .bucket("direct-bucket") .key("greeting.txt") .body(Vec::from(&b"Hello from aws-sdk-s3!"[..]).into()) .send() .await?; // Get object let resp = client .get_object() .bucket("direct-bucket") .key("greeting.txt") .send() .await?; let body = resp.body.collect().await?.into_bytes(); println!("Got: {}", String::from_utf8_lossy(&body)); // List objects let list = client .list_objects_v2() .bucket("direct-bucket") .send() .await?; println!("Objects:"); for obj in list.contents() { println!( " {} ({} bytes)", obj.key().unwrap_or("?"), obj.size().unwrap_or(0) ); } // Head object let head = client .head_object() .bucket("direct-bucket") .key("greeting.txt") .send() .await?; println!( "Head: size={}, etag={:?}", head.content_length().unwrap_or(0), head.e_tag() ); // Cleanup client .delete_object() .bucket("direct-bucket") .key("greeting.txt") .send() .await?; client .delete_bucket() .bucket("direct-bucket") .send() .await?; println!("Done!"); Ok(()) }