[package] name = "assembler" version.workspace = true edition.workspace = true license.workspace = true [[bin]] name = "assembler" path = "src/main.rs" [dependencies] converter = { path = "../../crates/converter" } planner = { path = "../../crates/planner" } optimize = { path = "../../crates/optimize" } thumbnail = { path = "../../crates/thumbnail" } serde.workspace = true serde_json.workspace = true axum = "0.7" tokio = { version = "1", features = ["rt-multi-thread", "macros", "sync", "fs", "signal", "time"] } reqwest = { version = "0.12", default-features = false, features = ["rustls-tls", "stream"] } dashmap = "6" bytes = "1" lru = "0.16" xxhash-rust = { version = "0.8", features = ["xxh3"] } futures-util = "0.3" tokio-util = { version = "0.7", features = ["rt", "io"] } async-compression = { version = "0.4", features = ["tokio", "zstd"] } zstd = "0.13" redis = { version = "0.27", default-features = false, features = ["tokio-comp", "connection-manager", "tokio-rustls-comp", "script"] } # Lambda self-invoke dispatch (ASSEMBLER_DISPATCH=lambda): one SigV4-signed POST # to the Lambda Invoke API (Event type). Hand-signed — the aws-sdk tree needs # rustc 1.94 (ours is 1.90) and is ~40 crates for a single call; creds come # straight from the Lambda runtime env. hmac = "0.12" sha2 = "0.10" hex = "0.4" tower-http = { version = "0.6", features = ["compression-zstd", "compression-gzip"] } memmap2 = "0.9" file-format = "0.26" tempfile = "3" # Tracing (OTLP over HTTP, traces only). Inert unless OTEL_EXPORTER_OTLP_ENDPOINT # is set — the same switch and variables as the Node apps (`@carbon/logger`). opentelemetry = "0.33" opentelemetry_sdk = "0.33" # No bundled HTTP client: its reqwest 0.13 would bring a second TLS stack # (aws-lc) beside ours (ring). Spans are sent with the reqwest already here. opentelemetry-otlp = { version = "0.33", default-features = false, features = ["trace", "http-proto"] } opentelemetry-http = { version = "0.33", default-features = false } async-trait = "0.1" [target.'cfg(target_os = "linux")'.dependencies] # Unprefixed: jemalloc is `malloc` for the whole process, so OCCT and FCL (C++, # which allocate through malloc) use it too and their freed memory is returned # to the OS. Prefixed, it served Rust only and the C++ side stayed on glibc, # whose arenas keep an idle service near its last job's peak. tikv-jemallocator = { version = "0.6", features = ["unprefixed_malloc_on_supported_platforms", "background_threads"] } [dev-dependencies] # Hermetic STEP fixtures for the optimize/ingest tests. occt-bridge = { path = "../../crates/occt-bridge" }