use crate::{Headers, OutgoingMessage, Publisher};
use super::lifecycle::{BoxError, BoxFuture};
pub trait ErasedPublisher: Send + Sync {
fn publish_bytes<'a>(
&'a self,
name: &'a str,
payload: &'a [u8],
) -> BoxFuture<'a, Result<(), BoxError>>;
fn publish_message<'a>(
&'a self,
name: &'a str,
payload: &'a [u8],
headers: &'a Headers,
) -> BoxFuture<'a, Result<(), BoxError>>;
}
impl<P: Publisher> ErasedPublisher for P {
fn publish_bytes<'a>(
&'a self,
name: &'a str,
payload: &'a [u8],
) -> BoxFuture<'a, Result<(), BoxError>> {
Box::pin(async move {
self.publish(OutgoingMessage::new(name, payload))
.await
.map_err(|e| Box::new(e) as BoxError)
})
}
fn publish_message<'a>(
&'a self,
name: &'a str,
payload: &'a [u8],
headers: &'a Headers,
) -> BoxFuture<'a, Result<(), BoxError>> {
Box::pin(async move {
self.publish(OutgoingMessage::new(name, payload).with_headers(headers.clone()))
.await
.map_err(|e| Box::new(e) as BoxError)
})
}
}