actix-web 4.9.0

Actix Web is a powerful, pragmatic, and extremely fast web framework for Rust
Documentation
[package]
name = "actix-web"
version = "4.9.0"
description = "Actix Web is a powerful, pragmatic, and extremely fast web framework for Rust"
authors = [
    "Nikolay Kim <fafhrd91@gmail.com>",
    "Rob Ede <robjtede@icloud.com>",
]
keywords = ["actix", "http", "web", "framework", "async"]
categories = [
    "network-programming",
    "asynchronous",
    "web-programming::http-server",
    "web-programming::websocket"
]
homepage = "https://actix.rs"
repository = "https://github.com/actix/actix-web"
license.workspace = true
edition.workspace = true
rust-version.workspace = true

[package.metadata.docs.rs]
rustdoc-args = ["--cfg", "docsrs"]
features = [
    "macros",
    "openssl",
    "rustls-0_20",
    "rustls-0_21",
    "rustls-0_22",
    "rustls-0_23",
    "compress-brotli",
    "compress-gzip",
    "compress-zstd",
    "cookies",
    "secure-cookies",
]

[package.metadata.cargo_check_external_types]
allowed_external_types = [
    "actix_http::*",
    "actix_router::*",
    "actix_rt::*",
    "actix_server::*",
    "actix_service::*",
    "actix_utils::*",
    "actix_web_codegen::*",
    "bytes::*",
    "cookie::*",
    "cookie",
    "futures_core::*",
    "http::*",
    "language_tags::*",
    "mime::*",
    "openssl::*",
    "rustls::*",
    "serde_json::*",
    "serde_urlencoded::*",
    "serde::*",
    "serde::*",
    "tokio::*",
    "url::*",
]

[features]
default = [
    "macros",
    "compress-brotli",
    "compress-gzip",
    "compress-zstd",
    "cookies",
    "http2",
    "unicode",
    "compat",
]

# Brotli algorithm content-encoding support
compress-brotli = ["actix-http/compress-brotli", "__compress"]
# Gzip and deflate algorithms content-encoding support
compress-gzip = ["actix-http/compress-gzip", "__compress"]
# Zstd algorithm content-encoding support
compress-zstd = ["actix-http/compress-zstd", "__compress"]

# Routing and runtime proc macros
macros = ["dep:actix-macros", "dep:actix-web-codegen"]

# Cookies support
cookies = ["dep:cookie"]

# Secure & signed cookies
secure-cookies = ["cookies", "cookie/secure"]

# HTTP/2 support (including h2c).
http2 = ["actix-http/http2"]

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

# TLS via Rustls v0.20
rustls = ["rustls-0_20"]
# TLS via Rustls v0.20
rustls-0_20 = ["__tls", "http2", "actix-http/rustls-0_20", "actix-tls/accept", "actix-tls/rustls-0_20"]
# TLS via Rustls v0.21
rustls-0_21 = ["__tls", "http2", "actix-http/rustls-0_21", "actix-tls/accept", "actix-tls/rustls-0_21"]
# TLS via Rustls v0.22
rustls-0_22 = ["__tls", "http2", "actix-http/rustls-0_22", "actix-tls/accept", "actix-tls/rustls-0_22"]
# TLS via Rustls v0.23
rustls-0_23 = ["__tls", "http2", "actix-http/rustls-0_23", "actix-tls/accept", "actix-tls/rustls-0_23"]

# Full unicode support
unicode = ["dep:regex", "actix-router/unicode"]

# Internal (PRIVATE!) features used to aid testing and checking feature status.
# Don't rely on these whatsoever. They 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 = []

# io-uring feature only available for Linux OSes.
experimental-io-uring = ["actix-server/io-uring"]

# Feature group which, when disabled, helps migrate code to v5.0.
compat = [
    "compat-routing-macros-force-pub",
]

# Opt-out forwards-compatibility for handler visibility inheritance fix.
compat-routing-macros-force-pub = ["actix-web-codegen?/compat-routing-macros-force-pub"]

[dependencies]
actix-codec = "0.5"
actix-macros = { version = "0.2.3", optional = true }
actix-rt = { version = "2.6", default-features = false }
actix-server = "2"
actix-service = "2"
actix-utils = "3"
actix-tls = { version = "3.4", default-features = false, optional = true }

actix-http = { version = "3.7", features = ["ws"] }
actix-router = { version = "0.5.3", default-features = false, features = ["http"] }
actix-web-codegen = { version = "4.3", optional = true, default-features = false }

ahash = "0.8"
bytes = "1"
bytestring = "1"
cfg-if = "1"
cookie = { version = "0.16", features = ["percent-encode"], optional = true }
derive_more = "0.99.8"
encoding_rs = "0.8"
futures-core = { version = "0.3.17", default-features = false }
futures-util = { version = "0.3.17", default-features = false }
itoa = "1"
impl-more = "0.1.4"
language-tags = "0.3"
log = "0.4"
mime = "0.3"
once_cell = "1.5"
pin-project-lite = "0.2.7"
regex = { version = "1.5.5", optional = true }
regex-lite = "0.1"
serde = "1.0"
serde_json = "1.0"
serde_urlencoded = "0.7"
smallvec = "1.6.1"
socket2 = "0.5"
time = { version = "0.3", default-features = false, features = ["formatting"] }
url = "2.1"

[dev-dependencies]
actix-files = "0.6"
actix-test = { version = "0.1", features = ["openssl", "rustls-0_23"] }
awc = { version = "3", features = ["openssl"] }

brotli = "6"
const-str = "0.5"
core_affinity = "0.8"
criterion = { version = "0.5", features = ["html_reports"] }
env_logger = "0.11"
flate2 = "1.0.13"
futures-util = { version = "0.3.17", default-features = false, features = ["std"] }
rand = "0.8"
rcgen = "0.13"
rustls-pemfile = "2"
serde = { version = "1.0", features = ["derive"] }
static_assertions = "1"
tls-openssl = { package = "openssl", version = "0.10.55" }
tls-rustls = { package = "rustls", version = "0.23" }
tokio = { version = "1.24.2", features = ["rt-multi-thread", "macros"] }
zstd = "0.13"

[lints]
workspace = true

[[test]]
name = "test_server"
required-features = ["compress-brotli", "compress-gzip", "compress-zstd", "cookies"]

[[test]]
name = "compression"
required-features = ["compress-brotli", "compress-gzip", "compress-zstd"]

[[example]]
name = "basic"
required-features = ["compress-gzip"]

[[example]]
name = "uds"
required-features = ["compress-gzip"]

[[example]]
name = "on-connect"
required-features = []

[[bench]]
name = "server"
harness = false

[[bench]]
name = "service"
harness = false

[[bench]]
name = "responder"
harness = false