[package]
edition = "2024"
rust-version = "1.85"
name = "throttle-net"
version = "1.0.0"
authors = ["James Gober <me@jamesgober.com>"]
build = false
autolib = false
autobins = false
autoexamples = false
autotests = false
autobenches = false
description = "General-purpose outbound throttling and resilience for Rust: multi-algorithm rate limiting, multi-dimensional and cost-aware limits, adaptive throttling, circuit breakers, and jittered backoff/retry. The outbound companion to rate-net."
homepage = "https://github.com/jamesgober/throttle-net"
documentation = "https://docs.rs/throttle-net"
readme = "README.md"
keywords = [
"rate-limiting",
"throttling",
"circuit-breaker",
"retry",
"backoff",
]
categories = [
"asynchronous",
"network-programming",
"concurrency",
]
license = "Apache-2.0 OR MIT"
repository = "https://github.com/jamesgober/throttle-net"
[package.metadata.docs.rs]
all-features = true
rustdoc-args = [
"--cfg",
"docsrs",
]
[features]
adaptive = [
"std",
"dep:event-listener",
]
circuit-breaker = ["std"]
default = [
"std",
"tokio",
]
metrics = ["dep:metrics"]
provider-headers = ["std"]
provider-llm = ["provider-headers"]
runtime = [
"std",
"dep:event-listener",
"dep:futures-lite",
]
smol = [
"runtime",
"dep:smol",
]
std = [
"dep:better-bucket",
"better-bucket/clock",
"dep:clock-lib",
"clock-lib/std",
"dep:error-forge",
"dep:ahash",
]
tokio = [
"runtime",
"dep:tokio",
]
tracing = ["dep:tracing"]
[lib]
name = "throttle_net"
path = "src/lib.rs"
[[example]]
name = "adaptive_concurrency"
path = "examples/adaptive_concurrency.rs"
required-features = ["adaptive"]
[[example]]
name = "circuit_breaker"
path = "examples/circuit_breaker.rs"
required-features = [
"circuit-breaker",
"tokio",
]
[[example]]
name = "llm_budget"
path = "examples/llm_budget.rs"
required-features = ["tokio"]
[[example]]
name = "per_tenant_quotas"
path = "examples/per_tenant_quotas.rs"
required-features = ["tokio"]
[[example]]
name = "retry_backoff"
path = "examples/retry_backoff.rs"
required-features = ["tokio"]
[[test]]
name = "circuit"
path = "tests/circuit.rs"
[[test]]
name = "fuzz_smoke"
path = "tests/fuzz_smoke.rs"
[[test]]
name = "loom_throttle"
path = "tests/loom_throttle.rs"
[[test]]
name = "observability"
path = "tests/observability.rs"
[[test]]
name = "proptests"
path = "tests/proptests.rs"
[[test]]
name = "retry"
path = "tests/retry.rs"
[[bench]]
name = "comparison_bench"
path = "benches/comparison_bench.rs"
harness = false
[[bench]]
name = "contention_bench"
path = "benches/contention_bench.rs"
harness = false
[[bench]]
name = "throttle_bench"
path = "benches/throttle_bench.rs"
harness = false
[dependencies.ahash]
version = "0.8"
optional = true
[dependencies.better-bucket]
version = "1"
optional = true
default-features = false
[dependencies.clock-lib]
version = "1"
optional = true
default-features = false
[dependencies.error-forge]
version = "1"
optional = true
[dependencies.event-listener]
version = "5"
optional = true
default-features = false
[dependencies.futures-lite]
version = "2"
optional = true
default-features = false
[dependencies.metrics]
version = "0.23"
optional = true
[dependencies.smol]
version = "2"
optional = true
[dependencies.tokio]
version = "1"
features = ["time"]
optional = true
default-features = false
[dependencies.tracing]
version = "0.1"
optional = true
[dev-dependencies.criterion]
version = "0.5"
features = ["html_reports"]
[dev-dependencies.governor]
version = "0.6"
[dev-dependencies.proptest]
version = "1"
[dev-dependencies.tokio]
version = "1"
features = [
"full",
"test-util",
]
[target."cfg(throttle_loom)".dependencies.loom]
version = "0.7"
[lints.rust.unexpected_cfgs]
level = "warn"
priority = 0
check-cfg = [
"cfg(throttle_loom)",
"cfg(docsrs)",
]
[profile.release]
opt-level = 3
lto = "fat"
codegen-units = 1
panic = "abort"
strip = "symbols"