pingora 0.4.0

A framework to build fast, reliable and programmable networked systems at Internet scale.
Documentation
[package]
name = "pingora"
version = "0.4.0"
authors = ["Yuchen Wu <yuchen@cloudflare.com>"]
license = "Apache-2.0"
edition = "2021"
repository = "https://github.com/cloudflare/pingora"
description = """
A framework to build fast, reliable and programmable networked systems at Internet scale.
"""
categories = ["asynchronous", "network-programming"]
keywords = ["async", "proxy", "http", "pingora"]

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[lib]
name = "pingora"
path = "src/lib.rs"

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

[dependencies]
pingora-core = { version = "0.4.0", path = "../pingora-core", default-features = false }
pingora-http = { version = "0.4.0", path = "../pingora-http" }
pingora-timeout = { version = "0.4.0", path = "../pingora-timeout" }
pingora-load-balancing = { version = "0.4.0", path = "../pingora-load-balancing", optional = true, default-features = false }
pingora-proxy = { version = "0.4.0", path = "../pingora-proxy", optional = true, default-features = false }
pingora-cache = { version = "0.4.0", path = "../pingora-cache", optional = true, default-features = false }

# Only used for documenting features, but doesn't work in any other dependency 
# group :(
document-features = { version = "0.2.10", optional = true }

[dev-dependencies]
clap = { version = "3.2.25", features = ["derive"] }
tokio = { workspace = true, features = ["rt-multi-thread", "signal"] }
matches = "0.1"
env_logger = "0.9"
reqwest = { version = "0.11", features = ["rustls"], default-features = false }
hyper = "0.14"
async-trait = { workspace = true }
http = { workspace = true }
log = { workspace = true }
prometheus = "0.13"
once_cell = { workspace = true }
bytes = { workspace = true }
regex = "1"

[target.'cfg(unix)'.dev-dependencies]
hyperlocal = "0.8"
jemallocator = "0.5"

[features]
default = []

#! ### Tls
#! Tls is provided by adding one of these features. If no tls-providing feature
#! is added, only unencrypted http. Only one tls-providing feature can be
#! selected at a time

## Use [OpenSSL](https://crates.io/crates/openssl) for tls 
##
## Requires native openssl libraries and build tooling
openssl = [
    "pingora-core/openssl",
    "pingora-proxy?/openssl",
    "pingora-cache?/openssl",
    "pingora-load-balancing?/openssl",
    "openssl_derived",
]

## Use [BoringSSL](https://crates.io/crates/boring) for tls 
##
## Requires native boring libraries and build tooling
boringssl = [
    "pingora-core/boringssl",
    "pingora-proxy?/boringssl",
    "pingora-cache?/boringssl",
    "pingora-load-balancing?/boringssl",
    "openssl_derived",
]

## Use  [rustls](https://crates.io/crates/rustls) for tls
##
## ⚠️ _Highly Experimental_! ⚠️ Try it, but don't rely on it (yet)
rustls = [
    "pingora-core/rustls",
    "pingora-proxy?/rustls",
    "pingora-cache?/rustls",
    "pingora-load-balancing?/rustls",
    "any_tls",
]

#! ### Pingora extensions

## Include the [proxy](crate::proxy) module
##
## This feature will include and export `pingora_proxy::prelude::*`
proxy = ["pingora-proxy"]

## Include the [lb](crate::lb) (load-balancing) module
##
## This feature will include and export `pingora_load_balancing::prelude::*`
lb = ["pingora-load-balancing", "proxy"]

## Include the [cache](crate::cache) module
##
## This feature will include and export `pingora_cache::prelude::*`
cache = ["pingora-cache"]

## Enable time/scheduling functionality
time = []

## Enable sentry for error notifications
sentry = ["pingora-core/sentry"]

# These features are intentionally not documented
openssl_derived = ["any_tls"]
any_tls = []
patched_http1 = ["pingora-core/patched_http1"]
document-features = ["dep:document-features", "proxy", "lb", "cache", "time", "sentry"]