[workspace]
members = ["crates/ruststream-macros"]
exclude = ["templates"]
[workspace.package]
version = "0.7.3"
edition = "2024"
rust-version = "1.95"
license = "Apache-2.0"
repository = "https://github.com/powersemmi/ruststream"
authors = ["RustStream contributors"]
[[bin]]
name = "ruststream"
path = "src/bin/ruststream/main.rs"
required-features = ["cli"]
[[example]]
name = "macro_app"
required-features = ["macros", "memory"]
[[example]]
name = "otel_export"
required-features = ["otel", "macros", "memory", "json"]
[[example]]
name = "routed_service"
path = "examples/routed_service/main.rs"
required-features = ["macros", "memory", "json", "metrics", "asyncapi", "logging"]
[[example]]
name = "quickstart"
required-features = ["macros", "memory", "json"]
[[example]]
name = "threads"
required-features = ["testing", "macros", "memory", "json"]
test = true
[[example]]
name = "protobuf"
required-features = ["testing", "macros", "memory"]
test = true
[[example]]
name = "manual_quickstart"
path = "examples/manual/quickstart.rs"
required-features = ["memory", "json"]
[[example]]
name = "manual_protobuf"
path = "examples/manual/protobuf.rs"
required-features = ["testing", "memory"]
test = true
[[example]]
name = "byte_lanes"
required-features = ["testing", "macros", "memory"]
test = true
[[example]]
name = "manual_byte_lanes"
path = "examples/manual/byte_lanes.rs"
required-features = ["testing", "memory"]
test = true
[[example]]
name = "manual_tutorial"
path = "examples/manual/tutorial/main.rs"
required-features = ["memory", "json", "asyncapi"]
[[example]]
name = "manual_tutorial_first_app"
path = "examples/manual/tutorial/first_app.rs"
required-features = ["memory", "json", "asyncapi"]
[[example]]
name = "manual_tutorial_reply_app"
path = "examples/manual/tutorial/reply_app.rs"
required-features = ["memory", "json", "asyncapi"]
[[example]]
name = "manual_subscribers"
path = "examples/manual/subscribers.rs"
required-features = ["memory", "json"]
[[example]]
name = "manual_seek"
path = "examples/manual/seek.rs"
required-features = ["testing", "memory", "json"]
test = true
[[example]]
name = "manual_publishing"
path = "examples/manual/publishing.rs"
required-features = ["memory", "json"]
[[example]]
name = "manual_retry"
path = "examples/manual/retry.rs"
required-features = ["testing", "memory", "json"]
test = true
[[example]]
name = "manual_settle_retry_destination"
path = "examples/manual/settle_retry_destination.rs"
required-features = ["testing", "memory", "json", "asyncapi"]
test = true
[[example]]
name = "manual_handler_outcome"
path = "examples/manual/handler_outcome.rs"
required-features = ["testing", "memory", "json"]
test = true
[[example]]
name = "manual_failure_policy"
path = "examples/manual/failure_policy.rs"
required-features = ["testing", "memory", "json"]
test = true
[[example]]
name = "manual_post_settle"
path = "examples/manual/post_settle.rs"
required-features = ["testing", "memory", "json"]
test = true
[[example]]
name = "manual_routing"
path = "examples/manual/routing.rs"
required-features = ["testing", "memory", "json"]
test = true
[[example]]
name = "manual_codecs"
path = "examples/manual/codecs.rs"
required-features = ["testing", "memory", "json", "cbor"]
test = true
[[example]]
name = "codec_json"
required-features = ["testing", "macros", "memory", "json"]
test = true
[[example]]
name = "manual_codec_json"
path = "examples/manual/codec_json.rs"
required-features = ["testing", "memory", "json"]
test = true
[[example]]
name = "codec_cbor"
required-features = ["testing", "macros", "memory", "cbor"]
test = true
[[example]]
name = "manual_codec_cbor"
path = "examples/manual/codec_cbor.rs"
required-features = ["testing", "memory", "cbor"]
test = true
[[example]]
name = "codec_msgpack"
required-features = ["testing", "macros", "memory", "msgpack"]
test = true
[[example]]
name = "manual_codec_msgpack"
path = "examples/manual/codec_msgpack.rs"
required-features = ["testing", "memory", "msgpack"]
test = true
[[example]]
name = "manual_custom_codec"
path = "examples/manual/custom_codec.rs"
required-features = ["testing", "memory", "msgpack"]
test = true
[[example]]
name = "manual_middleware"
path = "examples/manual/middleware.rs"
required-features = ["memory", "json"]
[[example]]
name = "manual_middleware_app_scope"
path = "examples/manual/middleware_app_scope.rs"
required-features = ["memory", "json"]
[[example]]
name = "manual_middleware_router_scope"
path = "examples/manual/middleware_router_scope.rs"
required-features = ["memory", "json"]
[[example]]
name = "manual_context"
path = "examples/manual/context.rs"
required-features = ["testing", "memory", "json"]
test = true
[[example]]
name = "manual_context_field"
path = "examples/manual/context_field.rs"
[[example]]
name = "manual_from_context"
path = "examples/manual/from_context.rs"
required-features = ["testing", "memory", "json"]
test = true
[[example]]
name = "manual_typed_headers"
path = "examples/manual/typed_headers.rs"
required-features = ["testing", "memory", "json"]
test = true
[[example]]
name = "manual_lifespan"
path = "examples/manual/lifespan.rs"
required-features = ["memory", "json"]
[[example]]
name = "manual_asyncapi_http"
path = "examples/manual/asyncapi_http.rs"
required-features = ["memory", "asyncapi"]
[[example]]
name = "manual_metrics_http"
path = "examples/manual/metrics_http.rs"
required-features = ["memory", "metrics", "json"]
[[example]]
name = "manual_http_outbox"
path = "examples/manual/http_outbox.rs"
required-features = ["memory", "json"]
[[example]]
name = "manual_logging_middleware"
path = "examples/manual/logging_middleware.rs"
required-features = ["memory", "json", "logging"]
[[example]]
name = "manual_routed_service_orders"
path = "examples/manual/routed_service_orders.rs"
required-features = ["memory", "json"]
[[example]]
name = "manual_otel_export"
path = "examples/manual/otel_export.rs"
required-features = ["otel", "memory", "json"]
[[example]]
name = "tutorial"
path = "examples/tutorial/main.rs"
required-features = ["macros", "memory", "json", "asyncapi"]
[[example]]
name = "tutorial_first_app"
path = "examples/tutorial/first_app.rs"
required-features = ["macros", "memory", "json", "asyncapi"]
[[example]]
name = "tutorial_reply_app"
path = "examples/tutorial/reply_app.rs"
required-features = ["macros", "memory", "json", "asyncapi"]
[[example]]
name = "subscribers"
required-features = ["macros", "memory", "json"]
[[example]]
name = "seek"
required-features = ["testing", "macros", "memory", "json"]
test = true
[[example]]
name = "publishing"
required-features = ["macros", "memory", "json"]
[[example]]
name = "retry"
required-features = ["testing", "macros", "memory", "json"]
test = true
[[example]]
name = "settle_retry_destination"
required-features = ["testing", "macros", "memory", "json", "asyncapi"]
test = true
[[example]]
name = "handler_outcome"
required-features = ["testing", "macros", "memory", "json"]
test = true
[[example]]
name = "failure_policy"
required-features = ["testing", "macros", "memory", "json"]
test = true
[[example]]
name = "post_settle"
required-features = ["testing", "macros", "memory", "json"]
test = true
[[example]]
name = "routing"
required-features = ["testing", "macros", "memory", "json"]
test = true
[[example]]
name = "subscriber_handler"
required-features = ["testing", "macros", "memory", "json"]
test = true
[[example]]
name = "manual_subscriber_handler"
path = "examples/manual/subscriber_handler.rs"
required-features = ["testing", "memory", "json"]
test = true
[[example]]
name = "subscriber_source"
required-features = ["testing", "macros", "memory", "json"]
test = true
[[example]]
name = "manual_subscriber_source"
path = "examples/manual/subscriber_source.rs"
required-features = ["testing", "memory", "json"]
test = true
[[example]]
name = "subscriber_settings"
required-features = ["testing", "macros", "memory", "json"]
test = true
[[example]]
name = "manual_subscriber_settings"
path = "examples/manual/subscriber_settings.rs"
required-features = ["testing", "memory", "json"]
test = true
[[example]]
name = "subscriber_batch"
required-features = ["testing", "macros", "memory", "json"]
test = true
[[example]]
name = "manual_subscriber_batch"
path = "examples/manual/subscriber_batch.rs"
required-features = ["testing", "memory", "json"]
test = true
[[example]]
name = "codecs"
required-features = ["testing", "macros", "memory", "json", "cbor"]
test = true
[[example]]
name = "custom_codec"
required-features = ["testing", "macros", "memory", "msgpack"]
test = true
[[example]]
name = "middleware"
required-features = ["macros", "memory", "json"]
[[example]]
name = "middleware_app_scope"
required-features = ["macros", "memory", "json"]
[[example]]
name = "middleware_router_scope"
required-features = ["macros", "memory", "json"]
[[example]]
name = "workers"
required-features = ["testing", "macros", "memory", "json"]
test = true
[[example]]
name = "manual_workers"
path = "examples/manual/workers.rs"
required-features = ["testing", "memory", "json"]
test = true
[[example]]
name = "manual_threads"
path = "examples/manual/threads.rs"
required-features = ["testing", "memory", "json"]
test = true
[[example]]
name = "poll_diagnostics"
required-features = ["testing", "macros", "memory", "json", "poll-diagnostics"]
test = true
[[example]]
name = "manual_poll_diagnostics"
path = "examples/manual/poll_diagnostics.rs"
required-features = ["testing", "memory", "json", "poll-diagnostics"]
test = true
[[example]]
name = "layer"
required-features = ["testing", "macros", "memory", "json"]
test = true
[[example]]
name = "manual_layer"
path = "examples/manual/layer.rs"
required-features = ["testing", "memory", "json"]
test = true
[[example]]
name = "publish_layer"
required-features = ["testing", "macros", "memory", "json"]
test = true
[[example]]
name = "manual_publish_layer"
path = "examples/manual/publish_layer.rs"
required-features = ["testing", "memory", "json"]
test = true
[[example]]
name = "dyn_stack"
required-features = ["testing", "macros", "memory", "json"]
test = true
[[example]]
name = "manual_dyn_stack"
path = "examples/manual/dyn_stack.rs"
required-features = ["testing", "memory", "json"]
test = true
[[example]]
name = "publish_dyn_stack"
required-features = ["testing", "macros", "memory", "json"]
test = true
[[example]]
name = "manual_publish_dyn_stack"
path = "examples/manual/publish_dyn_stack.rs"
required-features = ["testing", "memory", "json"]
test = true
[[example]]
name = "context"
required-features = ["testing", "macros", "memory", "json"]
test = true
[[example]]
name = "context_field"
[[example]]
name = "from_context"
required-features = ["testing", "macros", "memory", "json"]
test = true
[[example]]
name = "typed_headers"
required-features = ["testing", "macros", "memory", "json"]
test = true
[[example]]
name = "lifespan"
required-features = ["macros", "memory", "json"]
[[example]]
name = "asyncapi_http"
required-features = ["macros", "memory", "asyncapi"]
[[example]]
name = "metrics_http"
required-features = ["macros", "memory", "metrics", "json"]
[[example]]
name = "http_outbox"
required-features = ["macros", "memory", "json"]
[[example]]
name = "logging"
required-features = ["macros", "memory", "json", "logging"]
[[example]]
name = "logging_middleware"
required-features = ["macros", "memory", "json", "logging"]
[[example]]
name = "testing"
required-features = ["testing", "macros", "memory", "json"]
[[example]]
name = "testing_records"
required-features = ["testing", "macros", "memory", "json"]
test = true
[[example]]
name = "manual_testing_records"
path = "examples/manual/testing_records.rs"
required-features = ["testing", "memory", "json"]
test = true
[[example]]
name = "testing_published"
required-features = ["testing", "macros", "memory", "json"]
test = true
[[example]]
name = "manual_testing_published"
path = "examples/manual/testing_published.rs"
required-features = ["testing", "memory", "json"]
test = true
[[example]]
name = "testing_published_payloads"
required-features = ["testing", "macros", "memory", "json"]
test = true
[[example]]
name = "manual_testing_published_payloads"
path = "examples/manual/testing_published_payloads.rs"
required-features = ["testing", "memory", "json"]
test = true
[[example]]
name = "testing_published_options"
required-features = ["testing", "macros", "memory", "json"]
test = true
[[example]]
name = "manual_testing_published_options"
path = "examples/manual/testing_published_options.rs"
required-features = ["testing", "memory", "json"]
test = true
[[example]]
name = "testing_starting"
required-features = ["testing", "macros", "memory", "json"]
test = true
[[example]]
name = "manual_testing_starting"
path = "examples/manual/testing_starting.rs"
required-features = ["testing", "memory", "json"]
test = true
[[example]]
name = "testing_driving"
required-features = ["testing", "macros", "memory", "json"]
test = true
[[example]]
name = "manual_testing_driving"
path = "examples/manual/testing_driving.rs"
required-features = ["testing", "memory", "json"]
test = true
[[example]]
name = "testing_service_state"
required-features = ["testing", "macros", "memory", "json"]
test = true
[[example]]
name = "manual_testing_service_state"
path = "examples/manual/testing_service_state.rs"
required-features = ["testing", "memory", "json"]
test = true
[[example]]
name = "testing_subscriber_calls"
required-features = ["testing", "macros", "memory", "json"]
test = true
[[example]]
name = "manual_testing_subscriber_calls"
path = "examples/manual/testing_subscriber_calls.rs"
required-features = ["testing", "memory", "json"]
test = true
[[example]]
name = "testing_subscriber_payloads"
required-features = ["testing", "macros", "memory", "json"]
test = true
[[example]]
name = "manual_testing_subscriber_payloads"
path = "examples/manual/testing_subscriber_payloads.rs"
required-features = ["testing", "memory", "json"]
test = true
[[example]]
name = "testing_subscriber_carried"
required-features = ["testing", "macros", "memory", "json"]
test = true
[[example]]
name = "manual_testing_subscriber_carried"
path = "examples/manual/testing_subscriber_carried.rs"
required-features = ["testing", "memory", "json"]
test = true
[[example]]
name = "app_macro"
required-features = ["testing", "macros", "memory", "json"]
test = true
[[example]]
name = "manual_app_macro"
path = "examples/manual/app_macro.rs"
required-features = ["testing", "memory", "json"]
test = true
[[example]]
name = "app_running"
required-features = ["testing", "macros", "memory", "json"]
test = true
[[example]]
name = "manual_app_running"
path = "examples/manual/app_running.rs"
required-features = ["testing", "memory", "json"]
test = true
[[example]]
name = "app_state"
required-features = ["testing", "macros", "memory", "json"]
test = true
[[example]]
name = "manual_app_state"
path = "examples/manual/app_state.rs"
required-features = ["testing", "memory", "json"]
test = true
[[example]]
name = "app_lifecycle"
required-features = ["testing", "macros", "memory", "json"]
test = true
[[example]]
name = "manual_app_lifecycle"
path = "examples/manual/app_lifecycle.rs"
required-features = ["testing", "memory", "json"]
test = true
[[test]]
name = "app_dispatch"
required-features = ["memory", "json"]
[[test]]
name = "seek_api"
required-features = ["testing", "macros", "memory", "json"]
[[test]]
name = "asyncapi"
required-features = ["asyncapi", "memory", "macros"]
[[test]]
name = "settings_read"
required-features = ["macros", "memory", "json"]
[[test]]
name = "batch_subscriber"
required-features = ["macros", "memory", "json", "testing"]
[[test]]
name = "codecs"
required-features = ["macros", "memory", "cbor", "msgpack"]
[[test]]
name = "composition_rules"
required-features = ["macros", "memory", "json", "testing"]
[[test]]
name = "conformance_self"
required-features = ["conformance", "memory"]
[[test]]
name = "failure_policy"
required-features = ["macros", "memory", "json"]
[[test]]
name = "from_context"
required-features = ["macros", "memory", "json", "testing"]
[[test]]
name = "ctx_extractor"
required-features = ["macros", "memory", "json", "testing"]
[[test]]
name = "macro_subscriber"
required-features = ["macros", "memory", "json"]
[[test]]
name = "metrics"
required-features = ["metrics", "memory", "json"]
[[test]]
name = "retry_semantics"
required-features = ["macros", "memory", "json"]
[[test]]
name = "scope_codec"
required-features = ["macros", "memory", "json"]
[[test]]
name = "router_include"
required-features = ["macros", "memory", "json"]
[[test]]
name = "router_publishing"
required-features = ["macros", "memory", "json"]
[[test]]
name = "workers"
required-features = ["macros", "memory", "json"]
[[test]]
name = "testing_harness"
required-features = ["testing", "macros", "memory", "json"]
[[test]]
name = "memory_routing"
required-features = ["testing", "macros", "memory", "json"]
[[test]]
name = "ui"
required-features = ["macros", "memory", "json"]
[package]
name = "ruststream"
version.workspace = true
edition.workspace = true
rust-version.workspace = true
license.workspace = true
repository.workspace = true
authors.workspace = true
description = "Async messaging framework for Rust: broker-agnostic traits, router, codecs, and a conformance harness for broker authors."
readme = "README.md"
keywords = ["messaging", "async", "broker", "pubsub", "event-driven"]
categories = ["asynchronous", "network-programming"]
[package.metadata.docs.rs]
all-features = true
[package.metadata.cargo_check_external_types]
allowed_external_types = [
"ruststream_macros::*",
"serde::*",
"serde_core::*",
"bytes::bytes::Bytes",
"bytes::bytes_mut::BytesMut",
"bytes_utils::string::Str",
"bytes_utils::string::StrInner",
"futures_core::stream::Stream",
"tokio::runtime::task::error::JoinError",
"tokio::runtime::task::join::JoinHandle",
"tokio::runtime::handle::Handle",
"inventory::Collect",
"schemars",
"serde_json::error::Error",
"serde_json::value::Value",
"serde_norway::error::Error",
"prometheus::errors::Error",
"prometheus::registry::Registry",
"tracing_subscriber::filter::directive::ParseError",
"opentelemetry_otlp::exporter::ExporterBuildError",
"opentelemetry_sdk::error::OTelSdkError",
"opentelemetry_sdk::metrics::instrument::Instrument",
"opentelemetry_sdk::metrics::instrument::Stream",
"opentelemetry_sdk::metrics::meter_provider::SdkMeterProvider",
"opentelemetry_sdk::trace::provider::SdkTracerProvider",
]
[features]
default = ["json"]
memory = []
conformance = ["testing"]
json = ["dep:serde_json"]
msgpack = ["dep:rmp-serde"]
cbor = ["dep:ciborium"]
macros = ["dep:ruststream-macros"]
asyncapi = ["json", "dep:schemars", "dep:serde_norway"]
metrics = ["dep:prometheus"]
logging = ["dep:tracing-subscriber"]
cli = ["dep:clap", "dep:anyhow"]
poll-diagnostics = ["dep:quanta", "dep:pin-project-lite"]
testing = ["dep:inventory", "tokio/test-util"]
otel = [
"dep:opentelemetry",
"dep:opentelemetry_sdk",
"dep:opentelemetry-otlp",
"dep:tracing-opentelemetry",
"dep:tracing-subscriber",
]
[dependencies]
bytes = "1"
bytes-utils = "0.1.3"
futures = "0.3"
rtrb = "0.4.0"
serde = { version = "1.0.69", features = ["derive"] }
thiserror = "2"
tokio = { version = "1.44", features = ["rt-multi-thread", "macros", "sync", "time", "signal"] }
tokio-util = { version = "0.7.10", features = ["rt"] }
tracing = "0.1.29"
quanta = { version = "0.13.0", optional = true }
pin-project-lite = { version = "0.2", optional = true }
ruststream-macros = { version = "=0.7.3", path = "crates/ruststream-macros", optional = true }
tracing-subscriber = { version = "0.3.22", features = ["env-filter"], optional = true }
serde_json = { version = "1", optional = true }
rmp-serde = { version = "1", optional = true }
ciborium = { version = "0.2.1", optional = true }
prometheus = { version = "0.14", default-features = false, optional = true }
schemars = { version = "1", optional = true }
serde_norway = { version = "0.9", optional = true }
clap = { version = "4", features = ["derive"], optional = true }
anyhow = { version = "1.0.1", optional = true }
inventory = { version = "0.3.5", optional = true }
opentelemetry = { version = "0.33", default-features = false, features = ["trace", "metrics"], optional = true }
opentelemetry_sdk = { version = "0.33", default-features = false, features = ["trace", "metrics", "rt-tokio"], optional = true }
opentelemetry-otlp = { version = "0.33", default-features = false, features = ["grpc-tonic", "trace", "metrics"], optional = true }
tracing-opentelemetry = { version = "0.34", optional = true }
[[bench]]
name = "consume_json"
harness = false
required-features = ["memory", "json", "macros"]
[[bench]]
name = "consume_json_kilobyte"
harness = false
required-features = ["memory", "json", "macros"]
[[bench]]
name = "consume_lane"
harness = false
required-features = ["memory", "json", "macros"]
[[bench]]
name = "consume_pool"
harness = false
required-features = ["memory", "json", "macros"]
[[bench]]
name = "consume_threads"
harness = false
required-features = ["memory", "json", "macros"]
[[bench]]
name = "middleware"
harness = false
required-features = ["memory", "json", "macros"]
[[bench]]
name = "batch"
harness = false
required-features = ["memory", "json", "macros"]
[[bench]]
name = "reply"
harness = false
required-features = ["memory", "json", "macros"]
[[bench]]
name = "reply_lending"
harness = false
required-features = ["memory", "json", "macros"]
[[bench]]
name = "out_slot"
harness = false
required-features = ["memory", "json", "macros"]
[[bench]]
name = "typed_headers_write"
harness = false
required-features = ["memory", "json", "macros"]
[[bench]]
name = "typed_headers_read"
harness = false
required-features = ["memory", "json", "macros"]
[[bench]]
name = "request_reply"
harness = false
required-features = ["memory", "json", "macros"]
[[bench]]
name = "retry_copy"
harness = false
required-features = ["memory", "json", "macros"]
[[bench]]
name = "wall_clock"
harness = false
required-features = ["memory", "json", "macros"]
[dev-dependencies]
serde = { version = "1", features = ["derive"] }
serde_json = "1"
schemars = "1"
tokio = { version = "1.49", features = ["rt-multi-thread", "macros", "sync", "time", "net", "test-util"] }
axum = "0.8"
trybuild = "1"
prost = "0.14"
opentelemetry = { version = "0.33", default-features = false, features = ["trace", "metrics"] }
opentelemetry_sdk = { version = "0.33", default-features = false, features = ["trace", "metrics", "rt-tokio", "testing"] }
gungraun = "=0.20.0"
divan = "0.1.21"
tracing-subscriber = { version = "0.3.22", default-features = false, features = ["fmt", "std"] }
[profile.release]
lto = "fat"
[profile.bench]
inherits = "release"
debug = "line-tables-only"
[lints.rust]
unsafe_op_in_unsafe_fn = "deny"
unreachable_pub = "deny"
missing_docs = "deny"
missing_debug_implementations = "warn"
unused_qualifications = "warn"
[lints.clippy]
correctness = { level = "deny", priority = -1 }
suspicious = { level = "deny", priority = -1 }
perf = { level = "deny", priority = -1 }
pedantic = { level = "warn", priority = -1 }
nursery = { level = "warn", priority = -1 }
cargo = { level = "warn", priority = -1 }
module_name_repetitions = "allow"
missing_const_for_fn = "allow"
multiple_crate_versions = "allow"
redundant_pub_crate = "allow"