ferriskey 0.3.4

Rust client for Valkey, built for FlowFabric. Forked from glide-core (valkey-glide).
Documentation
# ferriskey

A Rust client for [Valkey](https://valkey.io), built for [FlowFabric](https://github.com/avifenesh/FlowFabric).

Ferriskey descends from [glide-core](https://github.com/valkey-io/valkey-glide) (part of valkey-glide), which itself evolved from redis-rs. It has been refactored for FlowFabric's needs:

- **ClientBuilder API** -- host/port/tls/cluster configuration without URL parsing
- **First-class FCALL** -- `client.fcall()` and `client.fcall_readonly()` for Valkey Functions
- **Function management** -- `function_load_replace()`, `function_list()`, `function_delete()`
- **Typed pipelines** -- `TypedPipeline` with slot-based result extraction
- **RESP3 protocol** -- native support for all Valkey value types
- **Cluster mode** -- automatic slot routing, redirection handling, read replicas
- **TLS** -- rustls-based, platform certificate verification
- **AWS IAM auth** -- ElastiCache/MemoryDB token-based authentication
- **Compression** -- client-side zstd/lz4 support

## Quick start

```rust
use ferriskey::ClientBuilder;

#[tokio::main]
async fn main() -> ferriskey::Result<()> {
    let client = ClientBuilder::new()
        .host("localhost", 6379)
        .build()
        .await?;

    // Basic key/value
    let _: () = client.set("key", "value").await?;
    let val: Option<String> = client.get("key").await?;
    assert_eq!(val.as_deref(), Some("value"));

    // Raw command
    let pong: String = client.cmd("PING").execute().await?;
    assert_eq!(pong, "PONG");

    // FCALL (Valkey Functions)
    let result: ferriskey::Value = client
        .fcall("my_function", &["key1"], &["arg1"])
        .await?;

    Ok(())
}
```

## Cluster mode

```rust
let client = ClientBuilder::new()
    .host("node1", 6379)
    .cluster()
    .tls()
    .build()
    .await?;
```

## Typed pipelines

```rust
let mut pipe = client.pipeline();
let slot_a = pipe.set("a", "1");
let slot_b = pipe.get::<String>("a");
pipe.execute().await?;

let val: Option<String> = slot_b.value()?;
```

## Heritage

This project incorporates code from:

- [valkey-glide]https://github.com/valkey-io/valkey-glide (Apache-2.0)
- [redis-rs]https://github.com/redis-rs/redis-rs (BSD-3-Clause)

## License

Apache-2.0