structured-proxy 2.0.0

Universal gRPC→REST transcoding proxy — config-driven, works with any gRPC service
Documentation
[package]
name = "structured-proxy"
description = "Universal gRPC→REST transcoding proxy — config-driven, works with any gRPC service"
version = "2.0.0"
edition = "2021"
authors = ["Structured World Foundation contributors"]
license = "Apache-2.0"
repository = "https://github.com/structured-world/structured-proxy"
homepage = "https://github.com/structured-world/structured-proxy"
documentation = "https://docs.rs/structured-proxy"
readme = "README.md"
keywords = ["grpc", "rest", "proxy", "transcoding", "protobuf"]
categories = ["network-programming", "web-programming::http-server"]

[[bin]]
name = "structured-proxy"
path = "src/main.rs"

[lib]
name = "structured_proxy"
path = "src/lib.rs"

[dependencies]
# HTTP framework
axum = { version = "0.8", features = ["macros"] }
tower = "0.5"
tower-http = { version = "0.7", features = ["cors", "trace"] }

# gRPC client (to upstream service)
tonic = "0.14"
tonic-health = "0.14"
prost = "0.14"

# Async runtime
tokio = { version = "1", features = ["full"] }

# Serialization
serde = { version = "1", features = ["derive"] }
serde_json = "1"
serde_urlencoded = "0.7"
serde_yaml = "0.9"

# Streaming (server-streaming RPC handler)
futures = "0.3"

# Protobuf reflection (REST↔gRPC transcoding)
prost-reflect = { version = "0.16", features = ["serde"] }

# Logging
tracing = "0.1"
tracing-subscriber = { version = "0.3", features = ["env-filter", "json"] }

# Error handling
thiserror = "2"
anyhow = "1"

# Metrics
prometheus = "0.14"

# Rate limiting (Shield middleware)
dashmap = "6"
async-trait = "0.1"
ipnet = "2"
# Optional shared rate-limit store for multi-instance deployments.
redis = { version = "0.27", features = ["tokio-comp"], optional = true }

# Auth (JWT validation, route policies)
jsonwebtoken = { version = "10", features = ["rust_crypto"] }
reqwest = { version = "0.12", default-features = false, features = ["rustls-tls", "json"] }
globset = "0.4"
base64 = "0.22"
sha2 = "0.11"
url = "2"
getrandom = "0.4"

# CLI
clap = { version = "4", features = ["derive"] }
envoy-types = "0.7"

[features]
# Shared Redis-backed rate-limit store for multi-instance deployments.
redis = ["dep:redis"]

[dev-dependencies]
tokio = { version = "1", features = ["macros", "rt-multi-thread"] }
tower = { version = "0.5", features = ["util"] }
http-body-util = "0.1"
ed25519-dalek = "2"
rand = "0.10"
chrono = "0.4"
tokio-stream = "0.1"