pub mod redis; pub mod nats; use async_trait::async_trait; use thiserror::Error; use tokio::sync::mpsc; #[derive(Error, Debug)] pub enum MessageBusError { #[error("Redis error: {0}")] Redis(String), #[error("NATS error: {0}")] Nats(String), #[error("Connection closed")] ConnectionClosed, #[error("Channel not found: {0}")] ChannelNotFound(String), #[error("Serialization error: {0}")] Serialization(String), } #[async_trait] pub trait MessageBus: Send + Sync + 'static { async fn publish(&self, channel: &str, message: &[u8]) -> Result<(), MessageBusError>; async fn subscribe(&self, channel: &str) -> Result>, MessageBusError>; async fn unsubscribe(&self, channel: &str) -> Result<(), MessageBusError>; async fn close(&self) -> Result<(), MessageBusError>; } pub use redis::RedisMessageBus; pub use nats::NatsMessageBus;