all-is-cubes 0.7.0

Recursive voxel game engine. Can be used for voxel raytracing.
[package]
name = "all-is-cubes"
version = "0.7.0"
authors = ["Kevin Reid <kpreid@switchb.org>"]
edition = "2021"
rust-version = "1.73"
description = "Recursive voxel game engine. Can be used for voxel raytracing."
# TODO: add homepage = "..." when we have one
repository = "https://github.com/kpreid/all-is-cubes"
license = "MIT OR Apache-2.0"
# TODO: revisit categories once it's more settled how useful this is as a game engine
categories = ["games", "graphics", "rendering::engine"]

[package.metadata.docs.rs]
features = ["arbitrary", "save", "std"]

[lib]
# Disable running as benchmark so that the default doesn't interfere with Criterion usage.
bench = false

[[bench]]
name = "block_bench"
harness = false

[[bench]]
name = "chunk_bench"
harness = false

[[bench]]
name = "lighting_bench"
harness = false

[[bench]]
name = "raycast_bench"
harness = false

[[bench]]
name = "raytrace_bench"
harness = false

[[bench]]
name = "save_bench"
harness = false

[[bench]]
name = "space_bench"
harness = false

# See src/lib.rs documentation for more details on features.
[features]
default = ["std"]
# Adds std-dependent functionality such as thread safety.
std = [
    "dep:once_cell",
    "arcstr/std", # not required but nicer behavior
    "yield-progress/sync",
]
# Adds `impl arbitrary::Arbitrary for ...`
# Note: Not using euclid/arbitrary because it's broken
arbitrary = ["dep:arbitrary", "ordered-float/arbitrary"]
# Adds serde implementations.
save = [
    "dep:base64", # encoded compressed data
    "dep:flate2", # compression
    "dep:serde",
    "dep:serde_repr",
    "bytemuck/extern_crate_std", # impl Error for CheckedCastError
    "ordered-float/serde",
]
# Adds rerun logging support
rerun = [
    "std",
    "dep:re_log_types",
    "dep:re_sdk",
    "dep:re_types",
]
# Adds automatic parallelism to some algorithms.
# If disabled, `std::thread` is never used.
threads = ["std", "dep:rayon"]

[dependencies]
arbitrary = { workspace = true, optional = true }
arcstr = { version = "1.1.5", default-features = false, features = ["serde", "substr"] }
base64 = { workspace = true, optional = true, features = ["std"] } # used in serialization
bitflags = { workspace = true }
bytemuck = { workspace = true, features = ["derive"] }
cfg-if = { workspace = true }
displaydoc = { workspace = true }
downcast-rs = { version = "1.2.0", default-features = false }
# mint feature to guarantee that our callers can use mint types
# libm feature to guarantee compilability and compatibility with no_std
euclid = { version = "0.22.9", default-features = false, features = ["libm", "mint"] }
embedded-graphics = "0.8.0"
exhaust = { workspace = true, default-features = false }
flate2 = { version = "1.0.26", optional = true }
futures-core = { workspace = true }
futures-util = { workspace = true }
hashbrown = { workspace = true }
indoc = { workspace = true }
itertools = { workspace = true }
log = { workspace = true }
manyfmt = { workspace = true }
mutants = { workspace = true }
num-traits = { workspace = true }
once_cell = { workspace = true, optional = true }
ordered-float = { workspace = true }
polonius-the-crab = { workspace = true }
png-decoder = { version = "0.1.1" }
rand = { workspace = true }
rand_xoshiro = { workspace = true }
rayon = { workspace = true, optional = true }
# re_sdk is a data-logging and visualization tool; we are currently using it _only_ for
# development of All is Cubes itself.
re_log_types = { workspace = true, optional = true }
re_sdk = { workspace = true, optional = true }
re_types = { workspace = true, optional = true }
# rc feature needed because we are [de]serializing `Arc`s
serde = { workspace = true, optional = true, features = ["derive", "rc"] }
serde_repr = { version = "0.1.12", optional = true, default-features = false }
unicode-segmentation = { workspace = true }
yield-progress = { workspace = true }

[build-dependencies]
# for calculation in build script
euclid = { version = "0.22.9", default-features = false, features = ["libm", "mint"] }

[dev-dependencies]
allocation-counter = { workspace = true }
criterion = { workspace = true }
pretty_assertions = { workspace = true }
serde_json = { workspace = true }
# Using tokio for async test-running.
tokio = { workspace = true, features = ["macros", "rt", "sync"] }

[lints]
workspace = true