[workspace]
resolver = "2"

members = [
	"consensus",
	"consensus/fast-sync",
	"consensus/rules",
	"cryptonight",
	"helper",
	"net/epee-encoding",
	"net/fixed-bytes",
	"net/levin",
	"net/wire",
	"p2p/p2p",
	"p2p/p2p-core",
	"p2p/dandelion-tower",
	"p2p/async-buffer",
	"p2p/address-book",
	"storage/blockchain",
	"storage/txpool",
	"storage/database",
	"pruning",
	"test-utils",
	"types",
	"rpc/json-rpc",
	"rpc/types",
	"rpc/interface",
]

[profile.release]
lto           = true   # Build with LTO
strip         = "none" # Keep panic stack traces
codegen-units = 1      # Optimize for binary speed over compile times
opt-level     = 3

[profile.dev]
lto           = false
strip         = "none"
# Not much slower compile times than opt-level 0, but much faster code.
opt-level     = 1

[profile.dev.package."*"]
# Compile dependencies with max optimization.
# This is obviously slower on a cold build,
# but you only build these once.
opt-level = 3

[workspace.dependencies]
async-trait           = { version = "0.1.74", default-features = false }
bitflags              = { version = "2.4.2", default-features = false }
borsh                 = { version = "1.2.1", default-features = false }
bytemuck              = { version = "1.14.3", default-features = false }
bytes                 = { version = "1.5.0", default-features = false }
cfg-if                = { version = "1.0.0", default-features = false }
clap                  = { version = "4.4.7", default-features = false }
chrono                = { version = "0.4.31", default-features = false }
crypto-bigint         = { version = "0.5.5", default-features = false }
crossbeam             = { version = "0.8.4", default-features = false }
curve25519-dalek      = { version = "4.1.3", default-features = false }
dalek-ff-group        = { git = "https://github.com/Cuprate/serai.git", rev = "d27d934", default-features = false }
dashmap               = { version = "5.5.3", default-features = false }
dirs                  = { version = "5.0.1", default-features = false }
futures               = { version = "0.3.29", default-features = false }
hex                   = { version = "0.4.3", default-features = false }
hex-literal           = { version = "0.4", default-features = false }
indexmap              = { version = "2.2.5", default-features = false }
monero-serai          = { git = "https://github.com/Cuprate/serai.git", rev = "d27d934", default-features = false }
multiexp              = { git = "https://github.com/Cuprate/serai.git", rev = "d27d934", default-features = false }
paste                 = { version = "1.0.14", default-features = false }
pin-project           = { version = "1.1.3", default-features = false }
randomx-rs            = { git = "https://github.com/Cuprate/randomx-rs.git", rev = "0028464", default-features = false }
rand                  = { version = "0.8.5", default-features = false }
rand_distr            = { version = "0.4.3", default-features = false }
rayon                 = { version = "1.9.0", default-features = false }
serde_bytes           = { version = "0.11.12", default-features = false }
serde_json            = { version = "1.0.108", default-features = false }
serde                 = { version = "1.0.190", default-features = false }
thiserror             = { version = "1.0.50", default-features = false }
thread_local		  = { version = "1.1.7", default-features = false }
tokio-util            = { version = "0.7.10", default-features = false }
tokio-stream          = { version = "0.1.14", default-features = false }
tokio                 = { version = "1.33.0", default-features = false }
tower                 = { version = "0.4.13", default-features = false }
tracing-subscriber    = { version = "0.3.17", default-features = false }
tracing               = { version = "0.1.40", default-features = false }

## workspace.dev-dependencies
tempfile              = { version = "3" }
pretty_assertions     = { version = "1.4.0" }
proptest              = { version = "1" }
proptest-derive       = { version = "0.4.0" }
tokio-test            = { version = "0.4.4" }

## TODO:
## Potential dependencies.
# arc-swap  = { version = "1.6.0" }  # Atomically swappable Arc<T>          | https://github.com/vorner/arc-swap
# itoa      = { version = "1.0.9" }  # Fast integer to string formatting    | https://github.com/dtolnay/itoa
# notify    = { version = "6.1.1" }  # Filesystem watching                  | https://github.com/notify-rs/notify
# once_cell = { version = "1.18.0" } # Lazy/one-time initialization         | https://github.com/matklad/once_cell
# open      = { version = "5.0.0" }  # Open PATH/URL, probably for binaries | https://github.com/byron/open-rs
# regex     = { version = "1.10.2" } # Regular expressions                  | https://github.com/rust-lang/regex
# ryu       = { version = "1.0.15" } # Fast float to string formatting      | https://github.com/dtolnay/ryu

# Maybe one day.
# disk     = { version = "*" } # (De)serialization to/from disk with various file formats | https://github.com/hinto-janai/disk
# readable = { version = "*" } # Stack-based string formatting utilities                  | https://github.com/hinto-janai/readable
# json-rpc = { git = "https://github.com/hinto-janai/json-rpc" }                          # JSON-RPC 2.0 types