ngdp-client 0.4.3

Command-line interface for Blizzard's NGDP with product queries, certificate management, and key operations
Documentation
# ngdp-client Examples

This directory contains examples demonstrating how to use the `ngdp-client` crate both as a CLI tool and as a library.

## Available Examples

### `certificate_operations.rs`

Demonstrates certificate-related functionality:

- Downloading certificates by SKI (Subject Key Identifier)
- Certificate details extraction (subject, issuer, validity)
- PEM and DER format handling
- Certificate verification workflows
- Integration with Ribbit client for certificate fetching

### `fallback_demo.rs`

Shows automatic Ribbit to TACT fallback functionality:

- FallbackClient configuration and usage
- Automatic protocol switching (Ribbit → TACT)
- Regional compatibility handling (SG → US mapping)
- Error recovery and resilience
- Performance comparison between protocols

### `products_operations.rs`

Comprehensive product query operations:

- Product listing with filtering
- Version information retrieval
- CDN configuration analysis
- Build configuration inspection
- Cross-region product comparison

### `wago_builds.rs`

Integration with Wago Tools API for historical build data:

- Historical build retrieval for products
- Version pattern filtering
- Time-based build filtering
- Background download build identification
- Build metadata analysis

## Library Usage

The examples show how to use `ngdp-client` as a library in your own applications:

```rust
use ngdp_client::{
    cached_client::create_client,
    output::{OutputStyle, format_success}
};
use ribbit_client::Region;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    // Create a cached client
    let client = create_client(Region::US).await?;

    // Query product versions
    let versions = client.get_product_versions("wow").await?;

    // Process results
    for entry in &versions.entries {
        println!("Build: {} - {}", entry.build_id, entry.versions_name);
    }

    Ok(())
}
```

## CLI Integration

Examples also demonstrate advanced CLI patterns:

- Custom output formatting
- Progress reporting
- Error handling strategies
- Configuration management
- Caching integration

## Running Examples

To run any example:

```bash
cargo run --example <example_name> -p ngdp-client
```

For example:

```bash
cargo run --example products_operations -p ngdp-client
cargo run --example certificate_operations -p ngdp-client
cargo run --example fallback_demo -p ngdp-client
cargo run --example wago_builds -p ngdp-client
```

## Integration Features

The examples demonstrate integration with other crates:

### Caching Integration

- Transparent caching with `ngdp-cache`
- Performance improvements through cached responses
- Cache management and statistics

### Protocol Integration

- Ribbit client integration for version queries
- TACT client for CDN configuration
- CDN client for content downloads
- BPSV parsing for data processing

### Output Formatting

- Beautiful terminal output with Unicode tables
- Color support with automatic detection
- Multiple output formats (text, JSON, BPSV)
- Progress indicators and status messages

## Error Handling

Examples show comprehensive error handling:

- Network connectivity issues
- Protocol-specific errors
- Data parsing failures
- Authentication problems
- Rate limiting responses

## Performance Optimization

Examples demonstrate performance features:

- Connection pooling and reuse
- Parallel operations where appropriate
- Caching for reduced API calls
- Streaming for large data sets
- Memory-efficient processing

## Configuration

Examples show various configuration options:

- Region selection and switching
- Protocol version preferences
- Timeout and retry settings
- Cache configuration
- Output format selection

Run examples with different configurations:

```bash
# With specific region
REGION=eu cargo run --example products_operations -p ngdp-client

# With debug logging
RUST_LOG=debug cargo run --example fallback_demo -p ngdp-client

# With custom cache settings
CACHE_TTL=3600 cargo run --example certificate_operations -p ngdp-client
```