[package]
name = "poem"
version = "1.2.59"
authors = ["sunli <scott_s829@163.com>"]
edition = "2021"
description = "Poem is a full-featured and easy-to-use web framework with the Rust programming language."
readme = "README.md"
license = "MIT/Apache-2.0"
documentation = "https://docs.rs/poem/"
homepage = "https://github.com/poem-web/poem"
repository = "https://github.com/poem-web/poem"
keywords = ["http", "web", "framework", "async"]
categories = [
    "network-programming",
    "asynchronous",
    "web-programming::http-server",
    "web-programming::websocket",
]

[features]
default = []
websocket = ["tokio-tungstenite", "sha1", "base64"]
multipart = ["multer", "mime"]
rustls = ["tokio-rustls", "rustls-pemfile"]
native-tls = ["tokio-native-tls"]
sse = []
static-files = ["httpdate", "mime", "mime_guess", "tokio/io-util", "tokio/fs"]
compression = ["async-compression", "typed-headers"]
tower-compat = ["tower"]
cookie = ["libcookie", "chrono", "time"]
session = ["cookie", "rand", "priority-queue"]
redis-session = ["session", "redis"]
opentelemetry = ["libopentelemetry", "opentelemetry-http", "opentelemetry-semantic-conventions"]
prometheus = ["libopentelemetry", "opentelemetry-prometheus", "libprometheus"]
tempfile = ["libtempfile", "tokio/fs"]
csrf = ["cookie", "base64", "libcsrf"]
test = ["sse", "sse-codec", "tokio-util/compat", "mime"]
i18n = ["fluent", "fluent-langneg", "fluent-syntax", "unic-langid", "intl-memoizer"]

[dependencies]
poem-derive = { path = "../poem-derive", version = "1.2.59" }

async-trait = "0.1.51"
bytes = "1.1.0"
futures-util = { version = "0.3.17", features = ["sink"] }
http = "0.2.5"
hyper = { version = "0.14.17", features = ["http1", "http2", "server", "runtime", "stream"] }
tokio = { version = "1.17.0", features = ["sync", "rt", "net", "time", "macros"] }
tokio-util = { version = "0.6.9", features = ["io"] }
serde = { version = "1.0.130", features = ["derive"] }
serde_json = "1.0.68"
serde_urlencoded = "0.7.0"
tokio-stream = "0.1.7"
parking_lot = "0.12.0"
pin-project-lite = "0.2.7"
percent-encoding = "2.1.0"
regex = "1.5.4"
smallvec = "1.6.1"
tracing = "0.1.29"
headers = "0.3.4"
thiserror = "1.0.30"

# Non-feature optional dependencies
multer = { version = "2.0.1", features = ["tokio"], optional = true }
tokio-tungstenite = { version = "0.15.0", optional = true }
tokio-rustls = { version = "0.23.2", optional = true }
rustls-pemfile = { version = "0.2.1", optional = true }
async-compression = { version = "0.3.8", optional = true, features = ["tokio", "gzip", "brotli", "deflate"] }
tower = { version = "0.4.8", optional = true, default-features = true, features = ["util", "buffer"] }
chrono = { version = "0.4.19", optional = true }
time = { version = "0.3", optional = true }
mime = { version = "0.3.16", optional = true }
mime_guess = { version = "2.0.3", optional = true }
typed-headers = { version = "0.2.0", optional = true }
rand = { version = "0.8.4", optional = true }
redis = { version = "0.21.2", optional = true, features = ["aio", "tokio-comp", "connection-manager"] }
libcookie = { package = "cookie", version = "0.16", features = ["percent-encode", "private", "signed", "key-expansion", "secure"], optional = true }
opentelemetry-http = { version = "0.5.0", optional = true }
opentelemetry-semantic-conventions = { version = "0.8.0", optional = true }
opentelemetry-prometheus = { version = "0.9.0", optional = true }
libprometheus = { package = "prometheus", version = "0.12.0", optional = true }
libopentelemetry = { package = "opentelemetry", version = "0.16.0", features = ["metrics"], optional = true }
libtempfile = { package = "tempfile", version = "3.2.0", optional = true }
priority-queue = { version = "1.2.0", optional = true }
tokio-native-tls = { version = "0.3.0", optional = true }
sha1 = { version = "0.6.0", optional = true }
base64 = { version = "0.13.0", optional = true }
libcsrf = { package = "csrf", version = "0.4.1", optional = true }
httpdate = { version = "1.0.2", optional = true }
sse-codec = { version = "0.3.2", optional = true }
fluent = { version = "0.16.0", optional = true }
fluent-langneg = { version = "0.13.0", optional = true }
fluent-syntax = { version = "0.11.0", optional = true }
unic-langid = { version = "0.9.0", optional = true, features = ["macros"] }
intl-memoizer = { version = "0.5.1", optional = true }

# Feature optional dependencies
anyhow = { version = "1.0.0", optional = true }
eyre06 = { package = "eyre", version = "0.6", optional = true }

[dev-dependencies]
async-stream = "0.3.2"
tokio = { version = "1.12.0", features = ["rt-multi-thread", "macros"] }

[package.metadata.docs.rs]
all-features = true
rustdoc-args = ["--cfg", "docsrs"]
