steamroom-client 0.1.0

High-level Steam depot download orchestration and delta patching
Documentation
# steamroom-client

High-level download orchestration for Steam depots built on top of [steamroom](https://crates.io/crates/steamroom).

## What's in this crate

- **Pipelined downloads** -- Concurrent chunk fetching with backpressure, retry, and ordered reassembly
- **Delta patching** -- Compares old and new manifests to skip unchanged files and remove deleted ones
- **File filtering** -- Filter downloads by literal paths, regex patterns, or `regex:`-prefixed filelist files
- **CDN server pool** -- Automatic rotation across CDN servers with health tracking and rate-limit backoff
- **Manifest caching** -- Local cache for depot manifests to avoid redundant downloads
- **Event stream** -- `DownloadEvent` channel for progress bars, logging, or custom UI

## Usage

```rust,no_run
use steamroom::depot::{DepotId, DepotKey};
use steamroom::cdn::{CdnClient, CdnServerPool};
use steamroom_client::download::{CdnChunkFetcher, DepotJob, FileFilter};

// Build a download job
let job = DepotJob::builder()
    .depot_id(DepotId(481))
    .depot_key(depot_key)
    .install_dir("/tmp/output".into())
    .file_filter(FileFilter::Regex(regex::Regex::new(r"\.dll$").unwrap()))
    .verify(true)
    .build()
    .unwrap();

// Create a CDN fetcher with server pool
let fetcher = CdnChunkFetcher::new(
    CdnClient::new().unwrap(),
    CdnServerPool::new(cdn_servers),
    None,
);

// Download (returns stats)
// let stats = job.download(&manifest, std::sync::Arc::new(fetcher)).await?;
```

## License

MIT OR Apache-2.0