tonic 0.13.0

A gRPC over HTTP/2 implementation focused on high performance, interoperability, and flexibility.
Documentation
[package]
name = "tonic"
# When releasing to crates.io:
# - Remove path dependencies
# - Update CHANGELOG.md.
# - Create "v0.11.x" git tag.
authors = ["Lucio Franco <luciofranco14@gmail.com>"]
categories = ["web-programming", "network-programming", "asynchronous"]
description = """
A gRPC over HTTP/2 implementation focused on high performance, interoperability, and flexibility.
"""
edition = "2021"
homepage = "http://github.com/hyperium/tonic"
keywords = ["rpc", "grpc", "async", "futures", "protobuf"]
license = "MIT"
readme = "../README.md"
repository = "http://github.com/hyperium/tonic"
version = "0.13.0"
rust-version = {workspace = true}
exclude = ["benches-disabled"]

[features]
codegen = ["dep:async-trait"]
gzip = ["dep:flate2"]
deflate = ["dep:flate2"]
zstd = ["dep:zstd"]
default = ["router", "transport", "codegen", "prost"]
prost = ["dep:prost"]
_tls-any = ["dep:tokio-rustls", "dep:tokio", "tokio?/rt", "tokio?/macros"] # Internal. Please choose one of `tls-ring` or `tls-aws-lc`
tls-ring = ["_tls-any", "tokio-rustls/ring"]
tls-aws-lc = ["_tls-any", "tokio-rustls/aws-lc-rs"]
tls-native-roots = ["_tls-any", "channel", "dep:rustls-native-certs"]
tls-webpki-roots = ["_tls-any","channel", "dep:webpki-roots"]
router = ["dep:axum", "dep:tower", "tower?/util"]
server = [
  "dep:h2",
  "dep:hyper", "hyper?/server",
  "dep:hyper-util", "hyper-util?/service", "hyper-util?/server-auto",
  "dep:socket2",
  "dep:tokio", "tokio?/macros", "tokio?/net", "tokio?/time",
  "tokio-stream/net",
  "dep:tower", "tower?/util", "tower?/limit",
]
channel = [
  "dep:hyper", "hyper?/client",
  "dep:hyper-util", "hyper-util?/client-legacy",
  "dep:tower", "tower?/balance", "tower?/buffer", "tower?/discover", "tower?/limit", "tower?/util",
  "dep:tokio", "tokio?/time",
  "dep:hyper-timeout",
]
transport = ["server", "channel"]

# [[bench]]
# name = "bench_main"
# harness = false

[dependencies]
base64 = "0.22"
bytes = "1.0"
http = "1"
tracing = "0.1"

http-body = "1"
http-body-util = "0.1"
percent-encoding = "2.1"
pin-project = "1.0.11"
tower-layer = "0.3"
tower-service = "0.3"
tokio-stream = {version = "0.1.16", default-features = false}

# prost
prost = {version = "0.13", default-features = false, features = ["std"], optional = true}

# codegen
async-trait = {version = "0.1.13", optional = true}

# transport
h2 = {version = "0.4", optional = true}
hyper = {version = "1", features = ["http1", "http2"], optional = true}
hyper-util = { version = "0.1.4", features = ["tokio"], optional = true }
socket2 = { version = "0.5", optional = true, features = ["all"] }
tokio = {version = "1", default-features = false, optional = true}
tower = {version = "0.5", default-features = false, optional = true}
axum = {version = "0.8", default-features = false, optional = true}

# rustls
rustls-native-certs = { version = "0.8", optional = true }
tokio-rustls = { version = "0.26.1", default-features = false, features = ["logging", "tls12"], optional = true }
webpki-roots = { version = "0.26", optional = true }

# compression
flate2 = {version = "1.0", optional = true}
zstd = { version = "0.13.0", optional = true }

# channel
hyper-timeout = {version = "0.5", optional = true}

[dev-dependencies]
bencher = "0.1.5"
quickcheck = "1.0"
quickcheck_macros = "1.0"
static_assertions = "1.0"
tokio = {version = "1.0", features = ["rt", "macros"]}
tower = {version = "0.5", features = ["load-shed", "timeout"]}

[lints]
workspace = true

[package.metadata.docs.rs]
all-features = true

[package.metadata.cargo_check_external_types]
allowed_external_types = [
  # major released
  "bytes::*",
  "tokio::*",
  "http::*",
  "http_body::*",
  "hyper::*",
  "rustls_pki_types::*",

  # not major released
  "prost::*",
  "tracing::*",

  "async_trait::async_trait",
  "axum_core::body::Body",
  "axum_core::response::into_response::IntoResponse",
  "axum::routing::Router",
  "futures_core::stream::Stream",
  "h2::error::Error",
  "tower_service::Service",
  "tower_layer::Layer",
  "tower_layer::stack::Stack",
  "tower_layer::identity::Identity",
]

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