use crate::traits::{MessagePublisher, PublisherError, Sent, SentBatch};
use crate::CanonicalMessage;
use async_trait::async_trait;
use std::any::Any;
#[derive(Clone)]
pub struct NullPublisher;
#[async_trait]
impl MessagePublisher for NullPublisher {
async fn send(&self, _message: CanonicalMessage) -> Result<Sent, PublisherError> {
Ok(Sent::Ack)
}
async fn send_batch(
&self,
_messages: Vec<CanonicalMessage>,
) -> Result<SentBatch, PublisherError> {
Ok(SentBatch::Ack)
}
fn as_any(&self) -> &dyn Any {
self
}
}
#[cfg(test)]
mod tests {
use super::*;
use crate::traits::Sent;
#[tokio::test]
async fn test_null_publisher_acks_single_and_batch_messages() {
let publisher = NullPublisher;
assert!(matches!(
publisher
.send(CanonicalMessage::from("ignored"))
.await
.unwrap(),
Sent::Ack
));
assert!(matches!(
publisher
.send_batch(vec![
CanonicalMessage::from("one"),
CanonicalMessage::from("two")
])
.await
.unwrap(),
SentBatch::Ack
));
assert!(publisher.as_any().is::<NullPublisher>());
}
}