[package] # We name the package `synapse` so that things like logging have the right # logging target. name = "synapse" # dummy version. See pyproject.toml for the Synapse's version number. version = "0.1.0" edition = "2021" rust-version = "1.82.0" [lib] name = "synapse" # We generate a `cdylib` for Python and a standard `lib` for running # tests/benchmarks. crate-type = ["lib", "cdylib"] # This is deprecated, see tool.maturin in pyproject.toml. # It is left here for compatibilty with maturin < 0.15. [package.metadata.maturin] # This is where we tell maturin where to place the built library. name = "synapse.synapse_rust" [dependencies] async-trait = "0.1.89" anyhow = "1.0.63" base64 = "0.23.1" bytes = "1.6.0" # Matches the version postgres-protocol uses, for iterating a decoded array's # elements (`ArrayValues` is a `FallibleIterator`); see database/postgres/value.rs. fallible-iterator = "0.2" headers = "0.4.0" http = "1.1.0" lazy_static = "1.4.0" libc = "0.2.174" log = "0.4.17" mime = "0.3.17" pyo3 = { version = "0.29.0", features = [ "macros", "anyhow", "abi3", "abi3-py310", # So we can pass `bytes::Bytes` directly back to Python efficiently, # https://docs.rs/pyo3/latest/pyo3/bytes/index.html "bytes", ] } pyo3-log = "0.13.4" pythonize = { version = "0.29.0", features = ["arbitrary_precision"] } regex = "1.6.0" sha2 = "0.11.0" serde = { version = "1.0.144", features = ["derive", "rc"] } serde_json = { version = "1.0.85", features = [ "raw_value", # We need to be able to parse arbitrary precision numbers, as some numbers # in the database may be out of range of i64 (as Python uses arbitrary # precision integers). "arbitrary_precision", ] } ulid = "3.0.0" icu_segmenter = "2.0.0" reqwest = { version = "0.12.15", default-features = false, features = [ "http2", "stream", "rustls-tls-native-roots", ] } http-body-util = "0.1.3" futures = "0.3.31" tokio = { version = "1.44.2", features = ["rt", "rt-multi-thread"] } tokio-postgres = "0.7" # Connection pooling for the native Rust Postgres backend. We use the generic # `deadpool::managed` pool with our own manager (rather than `deadpool-postgres`) # so it reuses our `connect`/default-host logic and connection-task spawning. # `rt_tokio_1` lets the pool enforce checkout timeouts (it sleeps via tokio time), # which we drive on our own tokio runtime. deadpool = { version = "0.12", features = ["rt_tokio_1"] } once_cell = "1.18.0" # Fast hashing for the integer-keyed maps in state resolution. rustc-hash = "2.1.1" itertools = "0.15.0" # Used by the `libpq` module to load the system libpq at runtime, so that # libpq is an optional runtime dependency rather than a build-time one. libloading = "0.8" postgres-protocol = "0.6.10" # Use the `ring` crypto provider (not the default `aws-lc-rs`, which needs cmake # and isn't available here) — `ring` is already in the tree via reqwest. rustls = { version = "0.23", default-features = false, features = [ "ring", "logging", "std", "tls12", ] } rustls-native-certs = "0.8" rustls-pemfile = "2" tokio-postgres-rustls = { version = "0.14.0", default-features = false, features = [ "ring", ] } lru = "0.16.4" [build-dependencies] blake2 = "0.11.0" hex = "0.4.3" rustc_version = "0.4.1"