//! Basic post3 usage: create a bucket, put/get/delete objects, list objects. //! //! Prerequisites: post3-server running on localhost:9000 //! mise run up && mise run dev //! //! Run: //! cargo run -p post3-sdk --example basic use post3_sdk::Post3Client; #[tokio::main] async fn main() -> anyhow::Result<()> { let endpoint = std::env::var("POST3_ENDPOINT") .unwrap_or_else(|_| "http://localhost:9000".to_string()); let client = Post3Client::new(&endpoint); // Create a bucket println!("Creating bucket 'example-bucket'..."); client.create_bucket("example-bucket").await?; // List buckets let buckets = client.list_buckets().await?; println!("Buckets: {:?}", buckets); // Put an object println!("Putting 'hello.txt'..."); client .put_object("example-bucket", "hello.txt", b"Hello, post3!") .await?; // Get the object back let data = client.get_object("example-bucket", "hello.txt").await?; println!("Got: {}", String::from_utf8_lossy(&data)); // Put a few more objects client .put_object("example-bucket", "docs/readme.md", b"# README") .await?; client .put_object("example-bucket", "docs/guide.md", b"# Guide") .await?; // List all objects let objects = client.list_objects("example-bucket", None).await?; println!("All objects:"); for obj in &objects { println!(" {} ({} bytes)", obj.key, obj.size); } // List with prefix filter let docs = client .list_objects("example-bucket", Some("docs/")) .await?; println!("Objects under docs/:"); for obj in &docs { println!(" {} ({} bytes)", obj.key, obj.size); } // Delete objects println!("Cleaning up..."); client .delete_object("example-bucket", "hello.txt") .await?; client .delete_object("example-bucket", "docs/readme.md") .await?; client .delete_object("example-bucket", "docs/guide.md") .await?; // Delete the bucket client.delete_bucket("example-bucket").await?; println!("Done!"); Ok(()) }