#[cfg(any(feature = "zeromq", feature = "zeromq-omq"))]
pub(crate) mod codec;
#[cfg(feature = "zeromq-omq")]
pub mod omq;
#[cfg(feature = "zeromq")]
pub mod zmq;
#[cfg(feature = "zeromq-omq")]
pub use omq::{ZeroMqOmqConsumer, ZeroMqOmqPublisher};
#[cfg(feature = "zeromq")]
pub use zmq::{ZeroMqConsumer, ZeroMqPublisher};
use crate::models::{ZeroMqBackend, ZeroMqConfig};
use crate::traits::{MessageConsumer, MessagePublisher};
use anyhow::Result;
pub(crate) async fn create_consumer(cfg: &ZeroMqConfig) -> Result<Box<dyn MessageConsumer>> {
match cfg.backend {
ZeroMqBackend::Zmq => {
#[cfg(feature = "zeromq")]
return Ok(Box::new(zmq::ZeroMqConsumer::new(cfg).await?) as Box<dyn MessageConsumer>);
#[cfg(not(feature = "zeromq"))]
return Err(anyhow::anyhow!(
"ZeroMQ backend 'zmq' requires the `zeromq` build feature"
));
}
ZeroMqBackend::Omq => {
#[cfg(feature = "zeromq-omq")]
return Ok(
Box::new(omq::ZeroMqOmqConsumer::new(cfg).await?) as Box<dyn MessageConsumer>
);
#[cfg(not(feature = "zeromq-omq"))]
return Err(anyhow::anyhow!(
"ZeroMQ backend 'omq' requires the `zeromq-omq` build feature"
));
}
}
}
pub(crate) async fn create_publisher(cfg: &ZeroMqConfig) -> Result<Box<dyn MessagePublisher>> {
match cfg.backend {
ZeroMqBackend::Zmq => {
#[cfg(feature = "zeromq")]
return Ok(Box::new(zmq::ZeroMqPublisher::new(cfg).await?) as Box<dyn MessagePublisher>);
#[cfg(not(feature = "zeromq"))]
return Err(anyhow::anyhow!(
"ZeroMQ backend 'zmq' requires the `zeromq` build feature"
));
}
ZeroMqBackend::Omq => {
#[cfg(feature = "zeromq-omq")]
return Ok(
Box::new(omq::ZeroMqOmqPublisher::new(cfg).await?) as Box<dyn MessagePublisher>
);
#[cfg(not(feature = "zeromq-omq"))]
return Err(anyhow::anyhow!(
"ZeroMQ backend 'omq' requires the `zeromq-omq` build feature"
));
}
}
}