#![forbid(unsafe_code)]
mod broker;
mod capability;
mod error;
mod headers;
mod message;
mod publisher;
mod schema;
mod subscriber;
mod subscription;
pub mod testing;
pub use broker::Broker;
pub use capability::{
BatchSubscriber, DescribeServer, Partitioned, RequestReply, ServerSpec, Subscribe,
TransactionalPublisher,
};
pub use error::AckError;
pub use headers::Headers;
pub use message::{IncomingMessage, OutgoingMessage, RawMessage};
pub use publisher::Publisher;
pub use schema::Message;
pub use subscriber::Subscriber;
pub use subscription::{Name, SubscriptionSource};
pub mod codec;
#[cfg(feature = "memory")]
pub mod memory;
pub mod runtime;
pub use runtime::RustStream;
#[cfg(feature = "macros")]
pub use ruststream_macros::subscriber;
#[cfg(feature = "macros")]
pub use ruststream_macros::app;
#[cfg(feature = "macros")]
pub use ruststream_macros::Message;
#[cfg(feature = "conformance")]
pub mod conformance;
#[cfg(feature = "asyncapi")]
pub mod asyncapi;
#[cfg(feature = "asyncapi")]
pub use schemars;
#[cfg(feature = "metrics")]
pub mod metrics;
#[cfg(feature = "logging")]
pub mod logging;
#[doc(hidden)]
pub mod __private {
use core::marker::PhantomData;
#[derive(Debug)]
pub struct Probe<T>(pub PhantomData<T>);
impl<T> Probe<T> {
#[must_use]
pub const fn new() -> Self {
Self(PhantomData)
}
}
impl<T> Default for Probe<T> {
fn default() -> Self {
Self::new()
}
}
pub trait NoSchemaProbe {
fn schema_json(&self) -> Option<String>;
}
impl<T> NoSchemaProbe for Probe<T> {
fn schema_json(&self) -> Option<String> {
None
}
}
#[cfg(feature = "asyncapi")]
impl<T: schemars::JsonSchema> Probe<T> {
#[must_use]
pub fn schema_json(&self) -> Option<String> {
serde_json::to_string(&schemars::schema_for!(T)).ok()
}
}
}