[package]
name = "actix-http"
version = "3.13.1"
authors = ["Nikolay Kim <fafhrd91@gmail.com>", "Rob Ede <robjtede@icloud.com>"]
description = "HTTP types and services for the Actix ecosystem"
keywords = ["actix", "http", "framework", "async", "futures"]
homepage = "https://actix.rs"
repository = "https://github.com/actix/actix-web"
categories = [
  "network-programming",
  "asynchronous",
  "web-programming::http-server",
  "web-programming::websocket",
]
license.workspace = true
edition.workspace = true
rust-version.workspace = true

[package.metadata.docs.rs]
features = [
  "http2",
  "ws",
  "openssl",
  "rustls-0_20",
  "rustls-0_21",
  "rustls-0_22",
  "rustls-0_23",
  "compress-brotli",
  "compress-gzip",
  "compress-zstd",
]

[package.metadata.cargo_check_external_types]
allowed_external_types = [
  "actix_codec::*",
  "actix_service::*",
  "actix_tls::*",
  "actix_utils::*",
  "bytes::*",
  "bytestring::*",
  "encoding_rs::*",
  "futures_core::*",
  "h2::*",
  "http::*",
  "httparse::*",
  "language_tags::*",
  "mime::*",
  "openssl::*",
  "rustls::*",
  "tokio_util::*",
  "tokio::*",
]

[features]
default = []

# HTTP/2 protocol support
http2 = ["dep:h2"]

# WebSocket protocol implementation
ws = ["dep:local-channel", "dep:base64", "dep:rand", "dep:sha1"]

# TLS via OpenSSL
openssl = ["__tls", "actix-tls/accept", "actix-tls/openssl"]

# TLS via Rustls v0.20
rustls = ["__tls", "rustls-0_20"]

# TLS via Rustls v0.20
rustls-0_20 = ["__tls", "actix-tls/accept", "actix-tls/rustls-0_20"]

# TLS via Rustls v0.21
rustls-0_21 = ["__tls", "actix-tls/accept", "actix-tls/rustls-0_21"]

# TLS via Rustls v0.22
rustls-0_22 = ["__tls", "actix-tls/accept", "actix-tls/rustls-0_22"]

# TLS via Rustls v0.23
rustls-0_23 = ["__tls", "actix-tls/accept", "actix-tls/rustls-0_23"]

# Compression codecs
compress-brotli = ["__compress", "dep:brotli"]
compress-gzip = ["__compress", "dep:flate2"]
compress-zstd = ["__compress", "dep:zstd"]

# Internal (PRIVATE!) features used to aid testing and checking feature status.
# Don't rely on these whatsoever. They are semver-exempt and may disappear at anytime.
__compress = []

# Internal (PRIVATE!) features used to aid checking feature status.
# Don't rely on these whatsoever. They may disappear at anytime.
__tls = []

[dependencies]
actix-codec = "0.5"
actix-rt = { version = "2.2", default-features = false }
actix-service = "2"
actix-utils = "3"

bitflags = "2"
bytes = "1"
bytestring = "1"
derive_more = { version = "2", features = ["as_ref", "deref", "deref_mut", "display", "error", "from"] }
encoding_rs = "0.8"
foldhash = "0.2"
futures-core = { version = "0.3.17", default-features = false, features = ["alloc"] }
http = "0.2.7"
httparse = "1.5.1"
httpdate = "1.0.1"
itoa = "1"
language-tags = "0.3"
mime = "0.3.4"
percent-encoding = "2.1"
pin-project-lite = "0.2"
smallvec = "1.6.1"
tokio = { version = "1.38.2", features = [] }
tokio-util = { version = "0.7", features = ["io", "codec"] }
tracing = { version = "0.1.30", default-features = false, features = ["log"] }

# http2
h2 = { version = "0.3.27", optional = true }

# websockets
base64 = { version = "0.22", optional = true }
local-channel = { version = "0.1", optional = true }
rand = { version = "0.10.1", optional = true }
sha1 = { version = "0.11", optional = true }

# openssl/rustls
actix-tls = { version = "3.4", default-features = false, optional = true }

# compress-*
brotli = { version = "8", optional = true }
flate2 = { version = "1.0.13", optional = true }
zstd = { version = "0.13", optional = true }

[dev-dependencies]
actix-http-test = { version = "3", features = ["openssl"] }
actix-server = "2"
actix-tls = { version = "3.4", features = ["openssl", "rustls-0_23-webpki-roots"] }
actix-web = "4"
awc = { version = "3", default-features = false, features = ["openssl"] }

async-stream = "0.3"
criterion = { version = "0.8", features = ["html_reports"] }
divan = "0.1.8"
env_logger = "0.11"
futures-util = { version = "0.3.17", default-features = false, features = ["alloc"] }
memchr = "2.4"
once_cell = "1.21"
rcgen = "0.14"
regex = "1.3"
rustls-pki-types = "1.13.1"
rustversion = "1"
serde = { version = "1", features = ["derive"] }
serde_json = "1.0"
static_assertions = "1"
tls-openssl = { package = "openssl", version = "0.10.55" }
tls-rustls_023 = { package = "rustls", version = "0.23" }
tokio = { version = "1.38.2", features = ["net", "rt", "macros", "sync"] }

[lints]
workspace = true

[[example]]
name = "ws"
required-features = ["ws", "rustls-0_23"]

[[example]]
name = "tls_rustls"
required-features = ["http2", "rustls-0_23"]

[[bench]]
name = "response-body-compression"
harness = false
required-features = ["compress-brotli", "compress-gzip", "compress-zstd"]

[[bench]]
name = "date-formatting"
harness = false
