Two complementary changes to reduce clean workspace build time from
~13min to ~8:43:
1. Per-package codegen-units overrides
Default for all release builds: codegen-units = 16 (parallel LLVM).
Numerical-sensitive crates (ml-* family, ndarray, nalgebra, cudarc,
simba, etc.) override back to 1 to preserve bit-exact LLVM
optimization decisions for the DQN regression suite.
Non-numerical plumbing (arrow, sqlx, tokio, parquet, ...) compiles
in parallel via 16 CGUs, no numerical impact.
2. Dependency deduplication
- axum 0.7 → 0.8 (workspace + services/api): dedupes vs tonic 0.14's
transitive axum 0.8. Eliminates a full duplicate compile of axum
and axum-core.
- statrs 0.17 → 0.18: dedupes nalgebra 0.32 vs 0.33. Also closes a
numerical concern (two nalgebra versions linked simultaneously).
- governor 0.6 → 0.10 (services/api + crates/data): dedupes dashmap
5 vs 6. dashmap is heavy; eliminating one full compile is a real
win.
- hashbrown 0.14 → 0.16 (workspace): partial dedupe (dashmap 6.1
still pulls 0.14 transitively).
- Workspace Cargo.toml documents residual unfixable duplicates with
reasons (base64, chacha20, phf, darling, itertools, getrandom,
hashbrown, syn, thiserror — all blocked by third-party crates we
can't bump without breakage).
Verified: cargo check --workspace passes. Numerical crates remain
at codegen-units = 1 — DQN bit-exact reproducibility preserved.
132 lines
3.3 KiB
TOML
132 lines
3.3 KiB
TOML
[package]
|
|
name = "data"
|
|
version.workspace = true
|
|
edition.workspace = true
|
|
rust-version.workspace = true
|
|
authors.workspace = true
|
|
license.workspace = true
|
|
repository.workspace = true
|
|
homepage.workspace = true
|
|
documentation.workspace = true
|
|
publish.workspace = true
|
|
keywords.workspace = true
|
|
categories.workspace = true
|
|
description = "Market data ingestion and broker integration for high-frequency trading systems"
|
|
|
|
[dependencies]
|
|
# Core async and utilities
|
|
tokio.workspace = true
|
|
tokio-stream.workspace = true
|
|
tokio-util.workspace = true
|
|
futures.workspace = true
|
|
futures-util.workspace = true
|
|
futures-core = "0.3"
|
|
async-trait.workspace = true
|
|
# async-stream.workspace = true # Unused - commented out
|
|
bytes.workspace = true
|
|
|
|
# Serialization and error handling
|
|
serde.workspace = true
|
|
serde_json.workspace = true
|
|
uuid.workspace = true
|
|
anyhow.workspace = true
|
|
thiserror.workspace = true
|
|
chrono.workspace = true
|
|
tracing.workspace = true
|
|
|
|
|
|
# Network and HTTP - USE WORKSPACE DEFAULTS
|
|
reqwest.workspace = true
|
|
tokio-tungstenite = { workspace = true, features = ["rustls-tls-webpki-roots"] }
|
|
tungstenite = "0.24"
|
|
url.workspace = true
|
|
|
|
# Market data providers - USE WORKSPACE DEFAULTS
|
|
# databento.workspace = true # REMOVED - too heavy, use direct feeds instead
|
|
|
|
# TLS support - USE WORKSPACE DEFAULTS (rustls provided by tokio-tungstenite feature)
|
|
native-tls.workspace = true
|
|
tokio-native-tls.workspace = true
|
|
# rustls = "0.23" # REMOVED - conflicts with workspace versions, use tokio-tungstenite rustls feature
|
|
webpki-roots = "0.26"
|
|
|
|
xml-rs = { workspace = true }
|
|
time = { workspace = true }
|
|
hex = { workspace = true }
|
|
md5 = { workspace = true }
|
|
|
|
|
|
# Financial types - USE WORKSPACE DEFAULTS
|
|
rust_decimal.workspace = true
|
|
rust_decimal_macros.workspace = true
|
|
num-traits = "0.2"
|
|
|
|
# Random number generation for testing
|
|
rand.workspace = true
|
|
|
|
# System information
|
|
num_cpus.workspace = true
|
|
|
|
|
|
# Configuration and utilities - USE WORKSPACE DEFAULTS
|
|
config.workspace = true
|
|
toml.workspace = true
|
|
base64.workspace = true
|
|
regex.workspace = true
|
|
|
|
|
|
# Compression and serialization - USE WORKSPACE DEFAULTS
|
|
flate2.workspace = true
|
|
zstd.workspace = true
|
|
lz4.workspace = true
|
|
bincode.workspace = true
|
|
sha2.workspace = true
|
|
hashbrown.workspace = true
|
|
smallvec.workspace = true
|
|
fastrand.workspace = true
|
|
crossbeam.workspace = true
|
|
crossbeam-channel.workspace = true
|
|
|
|
|
|
# Parquet for market data persistence and backtesting replay
|
|
parquet.workspace = true
|
|
arrow.workspace = true
|
|
|
|
# High-performance data structures - USE WORKSPACE DEFAULTS
|
|
dashmap.workspace = true
|
|
parking_lot.workspace = true
|
|
|
|
# Rate limiting and caching (governor 0.10 dedupes dashmap to v6)
|
|
governor = "0.10"
|
|
nonzero = "0.2"
|
|
redis = { workspace = true, optional = true }
|
|
|
|
|
|
# Internal workspace crates
|
|
trading_engine.workspace = true
|
|
common = { path = "../common" }
|
|
storage = { workspace = true }
|
|
dbn = "0.42.0"
|
|
|
|
[dev-dependencies]
|
|
tokio-test = { workspace = true }
|
|
# proptest = { workspace = true } # REMOVED from workspace
|
|
criterion = { workspace = true }
|
|
hdrhistogram = "7.5"
|
|
tempfile = { workspace = true }
|
|
# wiremock = { workspace = true } # REMOVED from workspace
|
|
tracing-subscriber = { workspace = true }
|
|
serial_test = "3.2"
|
|
|
|
[features]
|
|
default = ["databento", "benzinga", "icmarkets"] # Re-enabled databento feature for core functionality
|
|
databento = []
|
|
redis-cache = ["redis"]
|
|
benzinga = []
|
|
icmarkets = []
|
|
ib = []
|
|
mock = []
|
|
|
|
[lints]
|
|
workspace = true
|