From 3f54d17d74cf8750e7505efbf4a47995e8c0407d Mon Sep 17 00:00:00 2001 From: Alexander Ivanov Date: Wed, 1 Oct 2025 15:53:40 +0300 Subject: [PATCH] build: add a feature `writers-and-readers`, so we can import only the types in some cases --- runtime_tracing/Cargo.toml | 20 +++++++++++++------- runtime_tracing/build.rs | 1 + runtime_tracing/src/lib.rs | 23 ++++++++++++++++++++++- 3 files changed, 36 insertions(+), 8 deletions(-) diff --git a/runtime_tracing/Cargo.toml b/runtime_tracing/Cargo.toml index 852ef51..5c42372 100644 --- a/runtime_tracing/Cargo.toml +++ b/runtime_tracing/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "runtime_tracing" -version = "0.15.0" +version = "0.16.0" edition = "2024" authors = ["Metacraft Labs Ltd"] description = "A library for the schema and tracing helpers for the CodeTracer db trace format" @@ -20,19 +20,25 @@ serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" serde_repr = "0.1" schemars = "0.8.2" -capnp = "0.21.1" -cbor4ii = { version = "1.0.0", features = ["serde1", "use_std"] } -fscommon = "0.1.1" +capnp = { version = "0.21.1", optional = true } +cbor4ii = { version = "1.0.0", features = ["serde1", "use_std"], optional = true } +fscommon = { version = "0.1.1", optional = true } [target.'cfg(not(target_arch = "wasm32"))'.dependencies] -zeekstd = "0.6.0" +zeekstd = { version = "0.6.0", optional = true } [target.'cfg(target_arch = "wasm32")'.dependencies] -ruzstd = "0.8.1" +ruzstd = { version = "0.8.1", optional = true } [build-dependencies] -capnpc = "0.21.0" +capnpc = { version = "0.21.0", optional = true } [lib] name = "runtime_tracing" path = "src/lib.rs" + +[features] +writers_and_readers = ["dep:capnp", "dep:cbor4ii", "dep:fscommon", "dep:zeekstd", "dep:ruzstd", "dep:capnpc"] +# to disable the default features, a dependency must use: `default-features = false ` ! +# https://doc.rust-lang.org/cargo/reference/features.html +default = ["writers_and_readers"] diff --git a/runtime_tracing/build.rs b/runtime_tracing/build.rs index f139dff..0521cee 100644 --- a/runtime_tracing/build.rs +++ b/runtime_tracing/build.rs @@ -1,3 +1,4 @@ fn main() { + #[cfg(feature = "writers_and_readers")] ::capnpc::CompilerCommand::new().file("src/trace.capnp").run().expect("compiling schema") } diff --git a/runtime_tracing/src/lib.rs b/runtime_tracing/src/lib.rs index 04d8a9a..c144698 100644 --- a/runtime_tracing/src/lib.rs +++ b/runtime_tracing/src/lib.rs @@ -8,38 +8,59 @@ //! This crate provides the [`Tracer`] type for emitting trace events and a //! collection of serializable structures describing the trace format. //! The format is documented in `docs/` and the README. + +#[cfg(feature = "writers_and_readers")] mod abstract_trace_writer; mod base64; +#[cfg(feature = "writers_and_readers")] mod capnptrace; +#[cfg(feature = "writers_and_readers")] #[cfg(target_arch = "wasm32")] #[path = "./cbor_zstd_reader_wasm.rs"] mod cbor_zstd_reader; +#[cfg(feature = "writers_and_readers")] #[cfg(target_arch = "wasm32")] #[path = "./cbor_zstd_writer_wasm.rs"] mod cbor_zstd_writer; #[cfg(not(target_arch = "wasm32"))] +#[cfg(feature = "writers_and_readers")] mod cbor_zstd_reader; #[cfg(not(target_arch = "wasm32"))] +#[cfg(feature = "writers_and_readers")] mod cbor_zstd_writer; +#[cfg(feature = "writers_and_readers")] mod non_streaming_trace_writer; +#[cfg(feature = "writers_and_readers")] mod trace_readers; +#[cfg(feature = "writers_and_readers")] mod trace_writer; +#[cfg(feature = "writers_and_readers")] mod tracer; + +// enabled always! mod types; +#[cfg(feature = "writers_and_readers")] pub use crate::non_streaming_trace_writer::NonStreamingTraceWriter; +#[cfg(feature = "writers_and_readers")] pub use crate::trace_readers::TraceReader; +#[cfg(feature = "writers_and_readers")] pub use crate::trace_writer::TraceWriter; -pub use crate::tracer::{NONE_TYPE_ID, NONE_VALUE, TraceEventsFileFormat, create_trace_reader, create_trace_writer}; +#[cfg(feature = "writers_and_readers")] +pub use crate::tracer::{create_trace_reader, create_trace_writer, TraceEventsFileFormat, NONE_TYPE_ID, NONE_VALUE}; + +// enabled always! pub use crate::types::*; +#[cfg(feature = "writers_and_readers")] pub mod trace_capnp { include!(concat!(env!("OUT_DIR"), "/src/trace_capnp.rs")); } +#[cfg(feature = "writers_and_readers")] #[cfg(test)] mod tests { use super::*;