mod context;
mod dependencies;
mod error;
mod message_router;
mod runtime;
mod service;
mod session;
pub use crate::bus::{Message, MessageKind, PayloadDecodeError, SubscriptionPlan};
pub use context::Context;
pub use dependencies::{
ConfigurableOutboxPublisher, HasOutboxStore, HasReadModelStore, HasRepo,
ReadModelStoreDependencies, RepoDependencies, RepoReadModelDependencies,
};
pub use error::HandlerError;
pub use runtime::{DEFAULT_MAX_PUBLISH_ATTEMPTS, DEFAULT_PUBLISH_LEASE};
pub use service::{
CommandRequest, CommandResponse, DeliveryKind, HandlerBuilder, HandlerNames, HandlerSpec,
Service,
};
pub use session::Session;
#[cfg(feature = "http")]
pub const MAX_HTTP_BODY_BYTES: usize = 1024 * 1024;
#[cfg(feature = "http")]
mod http;
#[cfg(feature = "http")]
pub use http::{router, serve};
#[cfg(feature = "http")]
mod knative_ingress;
#[cfg(feature = "http")]
pub use knative_ingress::cloud_events_router;
#[cfg(feature = "grpc")]
pub mod grpc;
#[cfg(feature = "grpc")]
pub use grpc::{grpc_server, serve_grpc, GrpcServeError};
#[macro_export]
macro_rules! register_handlers {
($service:expr $(,)?) => {
$service
};
($service:expr, $($rest:tt)+) => {
$crate::__register_handlers!($service, $($rest)+)
};
}
#[doc(hidden)]
#[macro_export]
macro_rules! __register_handlers {
($service:expr, command $($seg:ident)::+ $(, $($rest:tt)*)?) => {
$crate::__register_handlers_continue!(
$service.command($($seg)::+::COMMAND).guarded(
$($seg)::+::guard,
$($seg)::+::handle,
)
$(, $($rest)*)?
)
};
($service:expr, event $($seg:ident)::+ $(, $($rest:tt)*)?) => {
$crate::__register_handlers_continue!(
$service.event($($seg)::+::EVENT).guarded(
$($seg)::+::guard,
$($seg)::+::handle,
)
$(, $($rest)*)?
)
};
($service:expr, events $($seg:ident)::+ $(, $($rest:tt)*)?) => {
$crate::__register_handlers_continue!(
$service.events($($seg)::+::EVENTS).guarded(
$($seg)::+::guard,
$($seg)::+::handle,
)
$(, $($rest)*)?
)
};
($service:expr, $($seg:ident)::+ $(, $($rest:tt)*)?) => {
compile_error!(
"register_handlers! entries must be prefixed with `command`, `event`, or `events`"
)
};
}
#[doc(hidden)]
#[macro_export]
macro_rules! __register_handlers_continue {
($service:expr) => {
$service
};
($service:expr,) => {
$service
};
($service:expr, $($rest:tt)+) => {
$crate::__register_handlers!($service, $($rest)+)
};
}