[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"]
heed    = ["dep:heed"]
redb    = ["dep:redb"]
service = ["dep:crossbeam", "dep:tokio", "dep:tower"]

[dependencies]
bytemuck = { version = "1.14.3", features = ["must_cast", "derive", "min_const_generics", "extern_crate_alloc"] }
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"] }
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 }
tokio     = { workspace = true, features = ["full"], optional = true }
tower     = { workspace = true, features = ["full"], optional = true }

# Optional features.
heed  = { version = "0.20.0-alpha.9", optional = true }
redb  = { version = "1.5.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"] }
page_size = { version = "0.6.0" }
tempfile = { version = "3.10.0" }