[package] name = "justapi-py" version.workspace = true edition.workspace = true license.workspace = true [lib] crate-type = ["cdylib", "lib"] [features] default = ["mail", "abi3"] mail = ["justapi-core/mail"] orjson = ["justapi-core/orjson"] redis-rate-limit = ["justapi-core/redis-rate-limit"] http3 = ["justapi-core/http3"] abi3 = ["pyo3/abi3-py311"] [dependencies] pyo3.workspace = true justapi-core = { workspace = true, features = ["db", "ws", "wasm", "graphql", "grpc"] } tokio.workspace = true http-body-util.workspace = true http-body = "1" bytes = "1" hyper.workspace = true http = "1" futures = "0.3" serde.workspace = true serde_json.workspace = true base64 = { workspace = true } serde_urlencoded.workspace = true tracing.workspace = true anyhow.workspace = true tokio-util.workspace = true tonic = "0.14.6" tokio-stream.workspace = true tokio-tungstenite = "0.24" pyo3-async-runtimes = { version = "0.29.0", features = ["tokio", "tokio-runtime"] } jsonschema = { version = "0.46", default-features = false } uuid = { version = "1", features = ["v4"] } # Native cron/scheduler (ADR-060): cron expression parsing + next-fire math. # Chosen over hand-rolling because cron has nasty edge cases (DST, leap years, # L/W/# specifiers) and is untrusted-spec-parsing-adjacent; a maintained crate # is the responsible Rust-first choice. See DECISIONS.md ADR-060. cron = "0.15" chrono = { version = "0.4", default-features = false, features = ["clock", "std"] } jsonwebtoken.workspace = true