[package] name = "justapi-core" description = "JustAPI core — tokio/hyper networking, matchit router, middleware, validation, serialization, sqlx DB pool." version.workspace = true edition.workspace = true license.workspace = true [features] default = ["opentelemetry"] tls = ["rustls", "tokio-rustls", "rustls-pemfile"] ws = ["tokio-tungstenite", "sha1"] http3 = ["dep:h3", "dep:h3-quinn", "dep:quinn", "tls"] compression = [] brotli-compression = ["compression", "brotli"] zstd-compression = ["compression", "zstd"] opentelemetry = ["dep:opentelemetry", "dep:opentelemetry_sdk", "dep:opentelemetry-stdout", "dep:opentelemetry-otlp", "dep:tracing-opentelemetry"] db = ["sqlx", "chrono"] inference = ["justapi-inference"] mail = ["dep:lettre", "dep:minijinja"] orjson = [] wasm = ["dep:wasmtime"] graphql = ["dep:async-graphql"] grpc = ["dep:tonic", "dep:prost"] redis-rate-limit = ["dep:redis"] [dependencies] tokio.workspace = true hyper.workspace = true hyper-util.workspace = true http-body-util.workspace = true serde = { workspace = true, features = ["derive"] } serde_json.workspace = true serde_urlencoded.workspace = true quick-xml.workspace = true tracing.workspace = true tracing-subscriber = { workspace = true, features = ["env-filter", "json"] } tracing-appender.workspace = true anyhow.workspace = true thiserror.workspace = true matchit.workspace = true async-trait.workspace = true jsonwebtoken.workspace = true governor.workspace = true futures = "0.3" tokio-util.workspace = true flate2.workspace = true brotli = { workspace = true, optional = true } zstd = { workspace = true, optional = true } opentelemetry = { workspace = true, optional = true } opentelemetry_sdk = { workspace = true, optional = true } opentelemetry-stdout = { workspace = true, optional = true } opentelemetry-otlp = { workspace = true, optional = true } tracing-opentelemetry = { workspace = true, optional = true } simd-json = { workspace = true, optional = true } tokio-tungstenite = { workspace = true, optional = true } tokio-stream.workspace = true sha1 = { workspace = true, optional = true } base64 = { workspace = true } jsonschema.workspace = true rustls = { workspace = true, optional = true } tokio-rustls = { workspace = true, optional = true } rustls-pemfile = { workspace = true, optional = true } sqlx = { workspace = true, optional = true } chrono = { version = "0.4", optional = true } rand = "0.8" inventory = "0.3.24" tonic = { version = "0.14.6", optional = true } prost = { version = "0.14.4", optional = true } tower = "0.5.3" http = "1.4.2" http-body = "1.0" multer = "3.1" bytes = "1.12.0" wasmtime = { version = "47.0.3", optional = true } redis = { version = "1.3.0", features = ["tokio-comp", "connection-manager"], optional = true } notify = "8.2.0" arc-swap = "1.9.2" async-graphql = { version = "7.2.1", optional = true } justapi-inference = { version = "2.0.9", path = "../justapi-inference", optional = true } tempfile = "3.27.0" lettre = { workspace = true, optional = true } minijinja = { workspace = true, optional = true } h3 = { workspace = true, optional = true } h3-quinn = { workspace = true, optional = true } quinn = { workspace = true, optional = true } rustls-pki-types.workspace = true [dev-dependencies] proptest = "1" futures = "0.3" serde_json.workspace = true tokio-tungstenite = { workspace = true, features = [] } rcgen = "0.13" [build-dependencies] tonic-build = "0.14.6"