[package]
name = "hpx"
version.workspace = true
description = "High Performance HTTP Client"
keywords = ["http", "client", "websocket", "exchange", "crypto"]
categories = ["web-programming::http-client"]
repository = "https://github.com/longcipher/hpx"
authors = ["Akagi201 <akagi201@gmail.com>"]
license = "Apache-2.0"
edition.workspace = true
include = [
"README.md",
"LICENSE",
"src/**/*.rs",
"examples/**/*.rs",
"tests/**/*.rs",
]
[package.metadata.docs.rs]
all-features = true
rustdoc-args = ["--cfg", "docsrs"]
targets = ["x86_64-unknown-linux-gnu"]
[features]
default = ["boring", "http1", "http2"]
charset = ["dep:encoding_rs", "dep:mime"]
cookies = ["dep:cookie"]
gzip = ["tower-http/decompression-gzip"]
brotli = ["tower-http/decompression-br"]
zstd = ["tower-http/decompression-zstd"]
deflate = ["tower-http/decompression-deflate"]
query = ["dep:serde", "dep:serde_urlencoded"]
form = ["dep:serde", "dep:serde_urlencoded"]
json = ["dep:serde", "dep:serde_json"]
multipart = ["dep:mime_guess", "dep:sync_wrapper"]
hickory-dns = ["dep:hickory-resolver"]
stream = ["tokio/fs", "dep:tokio-util", "dep:sync_wrapper"]
socks = ["dep:tokio-socks"]
ws = ["dep:sha1", "dep:fastwebsockets"]
webpki-roots = ["dep:webpki-root-certs"]
system-proxy = ["dep:system-configuration", "dep:windows-registry"]
tracing = ["http2/tracing", "dep:tracing"]
boring = [
"dep:boring",
"dep:tokio-boring",
"dep:brotli",
"dep:flate2",
]
rustls-tls = [
"dep:rustls",
"dep:tokio-rustls",
"dep:rustls-pki-types",
"dep:webpki-roots",
"dep:rustls-pemfile",
]
http1 = ["dep:httparse"]
http2 = ["dep:http2"]
macros = ["tokio/macros"]
[dependencies]
ahash = { workspace = true }
boring = { workspace = true, optional = true }
brotli = { workspace = true, optional = true }
bytes = { workspace = true }
flate2 = { workspace = true, optional = true }
futures-channel = { workspace = true }
futures-util = { workspace = true }
http = { workspace = true }
http-body = { workspace = true }
http-body-util = { workspace = true }
http2 = { workspace = true, features = ["unstable"], optional = true }
httparse = { workspace = true, optional = true }
ipnet = { workspace = true }
percent-encoding = { workspace = true }
pin-project-lite = { workspace = true }
rustls = { workspace = true, optional = true, features = [
"std",
"tls12",
"ring",
] }
rustls-pemfile = { workspace = true, optional = true }
rustls-pki-types = { workspace = true, optional = true }
schnellru = { workspace = true }
smallvec = { workspace = true, features = ["const_generics", "const_new"] }
socket2 = { workspace = true, features = ["all"] }
tokio = { workspace = true, features = ["net", "time", "rt", "io-util"] }
tokio-boring = { workspace = true, optional = true }
tokio-rustls = { workspace = true, optional = true, features = ["ring"] }
tower = { workspace = true, features = ["timeout", "util", "retry"] }
url = { workspace = true }
want = { workspace = true }
webpki-roots = { workspace = true, optional = true }
serde = { workspace = true, features = ["derive"], optional = true }
serde_json = { workspace = true, optional = true }
serde_urlencoded = { workspace = true, optional = true }
mime_guess = { workspace = true, optional = true }
encoding_rs = { workspace = true, optional = true }
mime = { workspace = true, optional = true }
sync_wrapper = { workspace = true, features = ["futures"], optional = true }
webpki-root-certs = { workspace = true, optional = true }
cookie = { workspace = true, optional = true }
tower-http = { workspace = true, optional = true }
tokio-util = { workspace = true, features = ["io"], optional = true }
tokio-socks = { workspace = true, optional = true }
fastwebsockets = { workspace = true, features = [
"upgrade",
"unstable-split",
], optional = true }
hickory-resolver = { workspace = true, optional = true }
base64 = { workspace = true }
sha1 = { workspace = true, optional = true }
tracing = { workspace = true, features = ["std"], optional = true }
[target.'cfg(windows)'.dependencies]
windows-registry = { workspace = true, optional = true }
[target.'cfg(target_os = "macos")'.dependencies]
system-configuration = { workspace = true, optional = true }
[target.'cfg(unix)'.dependencies]
libc = { workspace = true }
[dev-dependencies]
futures = { workspace = true, features = ["std"] }
hyper = { workspace = true, features = ["http1", "http2", "server"] }
hyper-util = { workspace = true, features = [
"http1",
"http2",
"server-auto",
"server-graceful",
"tokio",
] }
pretty_env_logger = { workspace = true }
serde = { workspace = true, features = ["derive"] }
tokio = { workspace = true, features = ["macros", "rt-multi-thread"] }
tokio-test = { workspace = true }
tower = { workspace = true, features = ["limit"] }
tracing = { workspace = true }
tracing-subscriber = { workspace = true }
zstd = { workspace = true }
[[test]]
name = "cookie"
path = "tests/cookie.rs"
required-features = ["cookies"]
[[test]]
name = "gzip"
path = "tests/gzip.rs"
required-features = ["gzip", "stream"]
[[test]]
name = "brotli"
path = "tests/brotli.rs"
required-features = ["brotli", "stream"]
[[test]]
name = "zstd"
path = "tests/zstd.rs"
required-features = ["zstd", "stream"]
[[test]]
name = "deflate"
path = "tests/deflate.rs"
required-features = ["deflate", "stream"]
[[test]]
name = "multipart"
path = "tests/multipart.rs"
required-features = ["multipart", "stream"]
[[test]]
name = "retry"
path = "tests/retry.rs"
[[example]]
name = "json_dynamic"
path = "examples/json_dynamic.rs"
required-features = ["json"]
[[example]]
name = "json_typed"
path = "examples/json_typed.rs"
required-features = ["json"]
[[example]]
name = "tor_socks"
path = "examples/tor_socks.rs"
required-features = ["socks"]
[[example]]
name = "form"
path = "examples/form.rs"
required-features = ["form"]
[[example]]
name = "connect_via_lower_priority_tokio_runtime"
path = "examples/connect_via_lower_priority_tokio_runtime.rs"
required-features = ["tracing"]
[[example]]
name = "emulation"
path = "examples/emulation.rs"
required-features = ["gzip", "brotli", "zstd", "deflate", "tracing"]
[[example]]
name = "cert_store"
path = "examples/cert_store.rs"
required-features = ["webpki-roots"]
[[example]]
name = "request_with_redirect"
path = "examples/request_with_redirect.rs"
[[example]]
name = "request_with_version"
path = "examples/request_with_version.rs"
[[example]]
name = "request_with_proxy"
path = "examples/request_with_proxy.rs"
required-features = ["socks"]
[[example]]
name = "request_with_emulation"
path = "examples/request_with_emulation.rs"
required-features = ["gzip", "brotli", "zstd", "deflate", "tracing"]
[[example]]
name = "request_with_local_address"
path = "examples/request_with_local_address.rs"
[[example]]
name = "request_with_interface"
path = "examples/request_with_interface.rs"
[[example]]
name = "http1_websocket"
path = "examples/http1_websocket.rs"
required-features = ["ws", "futures-util/std"]
[[example]]
name = "http2_websocket"
path = "examples/http2_websocket.rs"
required-features = ["ws", "futures-util/std"]
[[example]]
name = "keylog"
path = "examples/keylog.rs"
[[example]]
name = "unix_socket"
path = "examples/unix_socket.rs"