s3z 0.1.0-rc.2

S3 ops, but fearlessly fast!
Documentation
<p align="center">
  <picture>
    <source
      media="(prefers-color-scheme: dark)"
      srcset="https://raw.githubusercontent.com/JaeAeich/s3z/main/public/banner-dark.svg">
    <source
      media="(prefers-color-scheme: light)"
      srcset="https://raw.githubusercontent.com/JaeAeich/s3z/main/public/banner-cream.svg">
    <img
      alt="s3z — S3 ops, but fearlessly fast"
      src="https://raw.githubusercontent.com/JaeAeich/s3z/main/public/banner-cream.svg"
      width="800">
  </picture>
</p>

<p align="center">
  <strong>S3 ops, but fearlessly fast.</strong><br>
  <sub>Built in Rust. Streaming. Parallel. No bloat.</sub>
</p>

---

A lightweight, high-throughput S3 client built on raw HTTP + SigV4 signing.
No AWS SDK — just `reqwest`, `aws-sigv4`, and `tokio`.

## Install

```bash
cargo add s3z
```

## Quick start

```rust
use s3z::{Config, S3Client, UploadRequest, auth::CredentialSource};

#[tokio::main]
async fn main() -> s3z::error::Result<()> {
    let client = S3Client::new(
        Config::new("us-east-1", CredentialSource::Env),
    ).await?;

    let result = client
        .upload(UploadRequest::new(
            vec!["./data".into()],
            "my-bucket",
            "uploads/",
        ))
        .await?;

    for f in &result.files {
        println!("{} → s3://{} ({} parts)", f.source.display(), f.key, f.parts);
    }

    Ok(())
}
```

### S3-compatible backends

```rust
use s3z::{Config, S3Client, auth::CredentialSource};

let config = Config::with_endpoint(
    "us-east-1",
    CredentialSource::Static {
        access_key: "minioadmin".into(),
        secret_key: "minioadmin".into(),
    },
    "http://localhost:9000", // MinIO, SeaweedFS, Garage, etc.
);
```

## License

[MIT](https://github.com/JaeAeich/s3z/blob/main/LICENSE)