Breaking changes
- Typed wrapper structs for string parameters — most API methods now accept
TryInto<BucketName>/TryInto<ObjectKey>/ etc., so&str/String/ pre-validated typed values all work at call sites. Validation happens once at the boundary. (#200) - Error type cleanup and reorganization. (#179)
- Request builders migrated to the
TypedBuilderderive macro — builder surface is regenerated; some method shapes may differ. (#184) - Credential provider type simplified from
Arc<Box<dyn CredentialProvider>>toArc<dyn CredentialProvider>. (#164) DeleteObjectsbatching lowered from 10,000 to 1,000 keys per request to match the documented S3 limit. (#208)- Default multipart part size raised to 64 MiB (from the previous default, via an intermediate 16 MiB step). (#207, #209)
New features
- Request hooks infrastructure — intercept and modify in-flight requests, e.g. for load balancing. (#188, see
examples/load_balancing_with_hooks.rs) - Additional checksum algorithms: CRC32, CRC32C, SHA1, SHA256, and CRC64NVME. (#195)
Performance
- Signing key memoization;
stat_objectnow issues HEAD instead of GET. (#197) - Eliminated intermediate
Vec<Bytes>allocation during HTTP request body preparation. (#192)
Fixes
- Virtual-hosted-style bucket requests now use
/as the URL path. (#205) - Two bugs fixed in
AppendObjectContentmultipart append. (#206) - Correct part size in multipart copy; added missing response properties. (#196)
rustlscan now be used alongsidesha2andhmac. (#175)- Form-decoding (not percent-decoding) is used for whitespace in URLs during signing. (#178)
delete_and_purge_bucketdeletes objects recursively. (#166)- HTTP header constants use proper capitalization. (#186)
Housekeeping / internal
- Codebase consolidation and test infrastructure refresh. (#194)
- Test macro for parameterized integration tests. (#170)
- Duplicated code removed; lazy response evaluation. (#162)
- Dropped direct
tokio/tokio-stream/tokio-utildependencies; library internals now use runtime-agnosticfutures-util/async-streamcombinators. Tokio is still pulled in transitively viareqwest/hyper, so a tokio-compatible runtime is still required at the call site. (#167) - Clippy cleanup and unused-import pruning. (#182, #177)
copy_objectdocumentation. (#172)- Added
.github/copilot-instructions.md. (#191)
Full changelog: v0.3.0...v0.4.0