cu29 1.0.1

Copper Runtime prelude crate. Copper is a Rust engine for robotics.
Documentation
[package]
name = "cu29"
description = "Copper Runtime prelude crate. Copper is a Rust engine for robotics."
documentation = "https://docs.rs/cu29"
version.workspace = true
authors.workspace = true
edition.workspace = true
rust-version.workspace = true
license.workspace = true
keywords.workspace = true
categories.workspace = true
homepage.workspace = true
repository.workspace = true
readme = "README.md"

[[test]]
name = "safety_ids"
path = "tests/safety_ids.rs"
harness = false
required-features = ["safety-ids"]

[package.metadata.copper-safety]
scope = "bare-metal-no-std"

[dependencies]
cu29-clock = { workspace = true }
cu29-derive = { workspace = true }
cu29-log = { workspace = true }
cu29-log-derive = { workspace = true }
cu29-log-runtime = { workspace = true }
cu29-reflect-derive = { workspace = true }
cu29-runtime = { workspace = true }
cu29-traits = { workspace = true }
cu29-units = { path = "../cu29_units", version = "1.0.1", default-features = false, optional = true }
cu29-unifiedlog = { workspace = true }
cu29-value = { workspace = true }
defmt = { workspace = true, optional = true }
rtsan-standalone = { workspace = true, optional = true }

bevy_reflect_derive = { workspace = true, optional = true }
bincode = { workspace = true }
serde = { workspace = true }
serde_derive = { workspace = true }
inventory = { workspace = true, optional = true }
serde_json = { workspace = true, optional = true, default-features = true }
spin = { workspace = true }

# only std
rayon = { workspace = true, optional = true }
ctrlc = { workspace = true, optional = true }

[features]
default = ["std", "signal-handler", "textlogs", "units"]
defmt = [
  "dep:defmt",
  "cu29-log/defmt",
  "cu29-log-derive/defmt",
  "cu29-runtime/defmt",
  "cu29-traits/defmt",
] # for baremetal text logging
textlogs = ["cu29-log-derive/textlogs"]
units = ["dep:cu29-units"]
macro_debug = ["cu29-derive/macro_debug", "cu29-log-derive/macro_debug"]
signal-handler = ["dep:ctrlc", "cu29-derive/signal-handler"]
sysclock-perf = ["std", "cu29-runtime/sysclock-perf"]
high-precision-limiter = ["std", "cu29-runtime/high-precision-limiter"]
log-level-debug = ["cu29-log-derive/log-level-debug"]
log-level-info = ["cu29-log-derive/log-level-info"]
log-level-warning = ["cu29-log-derive/log-level-warning"]
log-level-error = ["cu29-log-derive/log-level-error"]
log-level-critical = ["cu29-log-derive/log-level-critical"]
reflect = [
  "dep:bevy_reflect_derive",
  "cu29-clock/reflect",
  "cu29-runtime/reflect",
  "cu29-traits/reflect",
  "cu29-units?/reflect",
]
remote-debug = ["reflect", "cu29-runtime/remote-debug"]
async-cl-io = ["std", "cu29-derive/async-cl-io", "cu29-runtime/async-cl-io"]
parallel-rt = ["std", "cu29-derive/parallel-rt", "cu29-runtime/parallel-rt"]
rt-scheduling = ["std", "cu29-runtime/rt-scheduling"]
mmap-fsync = ["std", "cu29-runtime/mmap-fsync", "cu29-unifiedlog/mmap-fsync"]
# Install a heap-allocation-counting global allocator (cu29-runtime side) and
# emit per-task allocation scopes around every lifecycle step (cu29-derive
# side). With this feature off, `cu29-derive` skips the scope codegen entirely,
# so a monitor never sees the hook fire — there's zero runtime cost. With it
# on, monitors receive observe_alloc(...) deltas around every step.
memory_monitoring = [
  "std",
  "cu29-runtime/memory_monitoring",
  "cu29-derive/memory_monitoring",
]
std = [
  "rayon",
  "cu29-clock/std",
  "cu29-derive/std",
  "cu29-log-derive/std",
  "cu29-log/std",
  "cu29-log-runtime/std",
  "cu29-runtime/std",
  "cu29-traits/std",
  "cu29-units?/std",
  "cu29-unifiedlog/std",
  "cu29-value/std",
]
rtsan = ["dep:rtsan-standalone", "cu29-derive/rtsan"]
safety-ids = ["std", "dep:inventory", "dep:serde_json"]