ferriskey 0.3.2

Rust client for Valkey, built for FlowFabric. Forked from glide-core (valkey-glide).
Documentation
[package]
name = "ferriskey"
version = "0.3.2"
edition = "2024"
license = "Apache-2.0"
authors = ["FlowFabric Contributors"]
description = "Rust client for Valkey, built for FlowFabric. Forked from glide-core (valkey-glide)."
repository = "https://github.com/avifenesh/FlowFabric"
keywords = ["valkey", "redis", "client", "async"]
categories = ["database"]

[dependencies]
# Allocator — mimalloc on supported platforms, system allocator elsewhere
mimalloc = { version = "0.1", default-features = false }

# Core
bytes = "1"
futures = "^0.3"
futures-util = { version = "0.3", features = ["alloc", "sink"] }
futures-intrusive = "0.5"
once_cell = "1"
async-trait = "0.1"
pin-project-lite = "0.2"
dispose = "0.5"
arc-swap = "1.9"

# Tokio runtime
tokio = { version = "1", features = ["rt", "net", "time", "sync", "io-util", "macros"] }
tokio-util = { version = "0.7", features = ["codec"] }
tokio-retry2 = { version = "0.6", features = ["jitter"] }

# TLS
rustls = { version = "0.23", features = ["aws-lc-rs"] }
rustls-platform-verifier = { version = "0.6", default-features = false }
tokio-rustls = { version = "0.26", default-features = false }
rustls-pki-types = "1.14"

# Redis protocol
ryu = "1"
itoa = "1"
url = "2"
percent-encoding = "2"
num-bigint = "0.4"
crc16 = "0.4"

# Cluster
rand = "0.9"
dashmap = "6"
parking_lot = "0.12"
socket2 = { version = "0.6", features = ["all"] }

# Telemetry — `tracing` for spans + events (always on, zero-cost when no
# subscriber is installed). Consumers install whatever tracing_subscriber
# + bridge they want; ferriskey doesn't embed an OTel or metrics backend.
tracing = "0.1"

# AWS IAM — all optional, gated by the `iam` feature at the bottom of
# this manifest. Without the feature, none of these (nor their ~40
# transitive aws-* / smithy / hyper / rustls-platform-verifier crates)
# land in the dep graph.
aws-config = { version = "1", optional = true }
aws-credential-types = { version = "1", optional = true }
aws-sigv4 = { version = "1", optional = true }
http = { version = "1", optional = true }
urlencoding = { version = "2", optional = true }

# Serialization / misc
serde_json = "1"
serde = { version = "1", features = ["derive"] }
sha1_smol = "1"
nanoid = "0.4"
versions = "7"
strum = "0.28"
strum_macros = "0.28"
zstd = { version = "0.13" }
lz4 = { version = "1.28" }

[features]
default = []
test-util = []

# Enable AWS IAM authentication for ElastiCache / MemoryDB. Pulls in
# aws-config + aws-sigv4 + their transitive aws-smithy / hyper /
# rustls-platform-verifier graph (~40 crates). OFF BY DEFAULT — users
# who don't auth against AWS-managed Valkey don't pay the build-time
# cost. `iam_config` on AuthenticationInfo and the `IAMTokenManager`
# type exist only when this feature is enabled.
iam = ["dep:aws-config", "dep:aws-credential-types", "dep:aws-sigv4", "dep:http", "dep:urlencoding"]

[dev-dependencies]
socket2 = "0.6"
tempfile = "3.27.0"
rstest = "^0.26"
serial_test = "3"
which = "8"
ctor = "0.9"
rustls = { version = "0.23", features = ["aws-lc-rs"] }
tokio = { version = "1", features = ["rt-multi-thread"] }
ferriskey = { path = "." }
once_cell = "1"
tracing-subscriber = { version = "0.3", features = ["fmt", "env-filter"] }
serde_json = "1"
hdrhistogram = "7"
libc = "0.2"
num_cpus = "1"

[package.metadata.cargo-machete]
ignored = ["strum"]  # strum provides traits for strum_macros derive (EnumString, Display)

[lints.rust]
unexpected_cfgs = { level = "warn", check-cfg = ['cfg(standalone_heartbeat)', 'cfg(feature, values("iam_tests"))'] }

[lints.clippy]
await_holding_lock = "deny"
mutex_atomic = "warn"

[[bench]]
name = "connections_benchmark"
harness = false