[package]
name = "hyperdriver"
version = "0.10.0"
edition = "2021"
description = "The missing middle for Hyper - Servers and Clients with ergonomic APIs"
license = "MIT"
repository = "https://github.com/alexrudy/hyperdriver"
documentation = "https://docs.rs/hyperdriver"
rust-version = "1.75"
readme = "README.md"
authors = ["Alex Rudy <opensource@alexrudy.net>"]
categories = [
"network-programming",
"web-programming::http-client",
"web-programming::http-server",
]
keywords = ["hyper", "http", "client", "server", "async"]
[lints.rust]
unsafe_code = "deny"
missing_docs = "warn"
missing_debug_implementations = "warn"
unexpected_cfgs = { level = "warn", check-cfg = ['cfg(tarpaulin)'] }
[dependencies]
axum = { version = "0.8", optional = true }
bytes = "1"
camino = { version = "1", default-features = false }
futures-core = "0.3"
futures-util = "0.3"
http = { version = "1" }
http-body = { version = "1" }
http-body-util = { version = "0.1" }
hyper = { version = "1", features = ["full"] }
ouroboros = { version = "0.18", optional = true }
parking_lot = { version = "0.12", optional = true, features = ["arc_lock"] }
pin-project = { version = "1" }
rustls-native-certs = { version = "0.8.1", optional = true }
socket2 = { version = "0.5", optional = true }
thiserror = { version = "2", optional = true }
tokio = { version = "1", features = ["full"] }
tracing = { version = "^0.1" }
[dependencies.rustls]
version = ">=0.23.18"
features = ["tls12"]
default-features = false
optional = true
[dependencies.tokio-rustls]
version = "0.26"
features = ["tls12"]
default-features = false
optional = true
[dependencies.tower]
version = "0.5"
features = ["make", "util"]
default-features = false
[dependencies.tower-http]
version = "0.6.2"
features = ["follow-redirect", "set-header", "trace"]
default-features = false
optional = true
[dev-dependencies]
clap = { version = "4.5.34" }
color-eyre = "0.6"
opentelemetry = "0.29"
opentelemetry-otlp = { version = "0.29", features = ["grpc-tonic"] }
opentelemetry-semantic-conventions = { version = "0.29", features = [
"semconv_experimental",
] }
opentelemetry_sdk = { version = "0.29", features = ["rt-tokio"] }
pem-rfc7468 = { version = "0.7", features = ["alloc"] }
static-assertions = { version = "1", package = "static_assertions" }
tempfile = "3"
tracing-opentelemetry = "0.30"
tracing-subscriber = { version = "0.3", features = ["env-filter"] }
webpki-roots.version = "0.26"
[features]
axum = ["dep:axum"]
client = [
"incoming",
"dep:parking_lot",
"dep:socket2",
"dep:thiserror",
"dep:tower-http",
"tower/timeout",
]
default = ["client", "server", "stream"]
docs = []
incoming = []
mocks = []
server = ["incoming", "dep:ouroboros", "dep:thiserror"]
sni = []
stream = []
tls = ["dep:rustls-native-certs", "dep:rustls", "dep:tokio-rustls"]
tls-aws-lc = ["rustls/aws_lc_rs", "tokio-rustls/aws_lc_rs"]
tls-ring = ["rustls/ring", "tokio-rustls/ring"]
[[example]]
name = "google"
path = "examples/client/google.rs"
required-features = ["client", "tls", "tls-ring"]
[[example]]
name = "hurl"
path = "examples/client/hurl.rs"
required-features = ["client", "tls", "tls-ring"]
[[example]]
name = "httpbin"
path = "examples/client/httpbin.rs"
required-features = ["client", "tls", "tls-ring"]
[[example]]
name = "profile"
path = "examples/client/profile.rs"
required-features = ["client", "tls", "tls-ring"]
[[example]]
name = "h2-server"
path = "examples/server/h2.rs"
required-features = ["server", "tls", "tls-ring"]
[[example]]
name = "single-threaded"
path = "examples/single_threaded.rs"
required-features = ["server", "client"]
[[test]]
name = "stream-duplex"
path = "tests/stream/duplex.rs"
required-features = ["server", "client", "stream"]
[[test]]
name = "stream-tcp"
path = "tests/stream/tcp.rs"
required-features = ["server", "client", "stream"]
[[test]]
name = "stream-tls"
path = "tests/stream/tls.rs"
required-features = ["server", "client", "stream", "tls", "tls-ring"]
[[test]]
name = "stream-unix"
path = "tests/stream/unix.rs"
required-features = ["server", "client", "stream"]
[[test]]
name = "server"
path = "tests/server.rs"
required-features = ["server", "client", "stream"]
[[test]]
name = "client"
path = "tests/client.rs"
required-features = ["server", "client", "stream"]
[[test]]
name = "client-connector"
path = "tests/client/connector.rs"
required-features = ["server", "client", "stream"]
[[test]]
name = "client-custom-body"
path = "tests/client/custombody.rs"
required-features = ["server", "client", "stream"]
[[test]]
name = "server-custom-body"
path = "tests/server/custombody.rs"
required-features = ["server", "stream"]
[[test]]
name = "graceful-shutdown"
path = "tests/server/graceful.rs"
required-features = ["server", "stream"]
[[test]]
name = "tls"
path = "tests/tls.rs"
required-features = ["client", "server", "tls", "tls-ring"]
[[test]]
name = "upgrades"
path = "tests/upgrades.rs"
required-features = ["server", "client", "stream"]
[package.metadata.cargo-udeps.ignore]
normal = ["rustls-native-certs", "rustls", "tokio-rustls"]
[package.metadata.docs.rs]
all-features = true