[package]
name = "a2a-protocol-server"
version = "0.3.0"
description = "A2A protocol v1.0 — server framework (hyper-backed)"
readme = "README.md"
edition.workspace = true
rust-version.workspace = true
license.workspace = true
authors.workspace = true
repository.workspace = true
homepage.workspace = true
documentation = "https://docs.rs/a2a-protocol-server"
keywords = ["a2a", "agent", "server", "http"]
categories = ["network-programming", "web-programming"]
[features]
signing = ["a2a-protocol-types/signing"]
tracing = ["dep:tracing"]
sqlite = ["dep:sqlx"]
postgres = ["dep:sqlx", "sqlx/postgres", "sqlx/json"]
websocket = ["dep:tokio-tungstenite", "dep:futures-util"]
grpc = ["dep:tonic", "dep:prost", "dep:tokio-stream", "dep:tonic-build"]
otel = ["dep:opentelemetry", "dep:opentelemetry_sdk", "dep:opentelemetry-otlp"]
axum = ["dep:axum"]
[dependencies]
a2a-protocol-types = { version = "0.3.0", path = "../a2a-types" }
serde = { workspace = true }
serde_json = { workspace = true }
hyper = { workspace = true }
http-body-util = { workspace = true }
hyper-util = { workspace = true, features = ["server", "server-auto"] }
tokio = { workspace = true, features = ["signal"] }
uuid = { workspace = true }
bytes = "1"
tokio-util = { version = ">=0.7, <0.8", features = ["rt"] }
tracing = { workspace = true, optional = true }
sqlx = { workspace = true, optional = true }
tokio-tungstenite = { version = ">=0.24, <0.25", optional = true }
futures-util = { version = ">=0.3.30, <0.4", optional = true, default-features = false, features = ["sink"] }
tonic = { workspace = true, optional = true }
prost = { workspace = true, optional = true }
tokio-stream = { workspace = true, optional = true }
opentelemetry = { version = "0.28", optional = true }
opentelemetry_sdk = { version = "0.28", optional = true, features = ["rt-tokio", "metrics"] }
opentelemetry-otlp = { version = "0.28", optional = true, default-features = false, features = ["grpc-tonic", "metrics"] }
axum = { version = "0.8", optional = true, default-features = false, features = ["json", "query", "tokio"] }
[build-dependencies]
tonic-build = { workspace = true, optional = true }
[package.metadata.docs.rs]
all-features = true
rustdoc-args = ["--cfg", "docsrs"]
[dev-dependencies]
tokio = { workspace = true, features = ["macros", "rt-multi-thread", "net", "time", "test-util"] }
hyper = { workspace = true }
hyper-util = { workspace = true, features = ["server", "server-auto"] }
http-body-util = { workspace = true }
bytes = "1"
serde_json = { workspace = true }
a2a-protocol-types = { version = "0.3.0", path = "../a2a-types" }
criterion = { workspace = true }
sqlx = { workspace = true }
axum = { version = "0.8", features = ["json", "query", "tokio"] }
[[bench]]
name = "handler_bench"
harness = false