[package]
name        = "cuprate-database"
version     = "0.0.0"
edition     = "2021"
description = "Cuprate's database abstraction"
license     = "MIT"
authors     = ["hinto-janai"]
repository  = "https://github.com/Cuprate/cuprate/tree/main/database"
keywords    = ["cuprate", "database"]

[features]
default   = ["heed", "redb", "service"]
# default   = ["redb", "service"]
# default   = ["redb-memory", "service"]
heed       = ["dep:heed"]
redb       = ["dep:redb"]
redb-memory = ["redb"]
service     = ["dep:crossbeam", "dep:futures", "dep:tokio", "dep:tokio-util", "dep:tower", "dep:rayon"]

[dependencies]
bitflags = { workspace = true, features = ["serde", "bytemuck"] }
bytemuck = { version = "1.14.3", features = ["must_cast", "derive", "min_const_generics", "extern_crate_alloc"] }
bytes    = { workspace = true }
cfg-if   = { workspace = true }
# FIXME:
# We only need the `thread` feature if `service` is enabled.
# Figure out how to enable features of an already pulled in dependency conditionally.
cuprate-helper   = { path = "../helper", features = ["fs", "thread", "map"] }
cuprate-types    = { path = "../types", features = ["service"] }
curve25519-dalek = { workspace = true }
monero-pruning   = { path = "../pruning" }
monero-serai     = { workspace = true, features = ["std"] }
paste            = { workspace = true }
page_size        = { version = "0.6.0" } # Needed for database resizes, they must be a multiple of the OS page size.
thiserror        = { workspace = true }

# `service` feature.
crossbeam    = { workspace = true, features = ["std"], optional = true }
futures      = { workspace = true, optional = true }
tokio        = { workspace = true, features = ["full"], optional = true }
tokio-util   = { workspace = true, features = ["full"], optional = true }
tower        = { workspace = true, features = ["full"], optional = true }
thread_local = { workspace = true }
rayon        = { workspace = true, optional = true }

# Optional features.
heed  = { version = "0.20.0", features = ["read-txn-no-tls"], optional = true }
redb  = { version = "2.1.0", optional = true }
serde = { workspace = true, optional = true }

[dev-dependencies]
bytemuck = { version = "1.14.3", features = ["must_cast", "derive", "min_const_generics", "extern_crate_alloc"] }
cuprate-helper = { path = "../helper", features = ["thread"] }
cuprate-test-utils = { path = "../test-utils" }
page_size = { version = "0.6.0" }
tempfile = { version = "3.10.0" }
pretty_assertions = { workspace = true }
hex = { workspace = true }
hex-literal = { workspace = true }