Files
post3/crates/post3-sdk/examples/aws_sdk_direct.rs
2026-02-27 11:38:10 +01:00

108 lines
2.7 KiB
Rust

//! 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(())
}