use std::future::{Future, ready};
use bytes::Bytes;
use ruststream::{AckError, HeaderMap, IncomingMessage};
#[cfg(feature = "testing")]
use crate::in_process::Release;
pub struct ZmqMessage {
pub(crate) name: String,
pub(crate) headers: HeaderMap,
pub(crate) payload: Bytes,
#[cfg(feature = "testing")]
release: Release,
}
#[cfg(not(feature = "testing"))]
const _: () = assert!(size_of::<ZmqMessage>() == size_of::<(String, HeaderMap, Bytes)>());
impl std::fmt::Debug for ZmqMessage {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.debug_struct("ZmqMessage")
.field("name", &self.name)
.field("payload_len", &self.payload.len())
.finish_non_exhaustive()
}
}
impl ZmqMessage {
pub(crate) fn new(name: String, headers: HeaderMap, payload: Bytes) -> Self {
Self {
name,
headers,
payload,
#[cfg(feature = "testing")]
release: Release::default(),
}
}
#[cfg(feature = "testing")]
pub(crate) fn counted(mut self, release: Release) -> Self {
self.release = release;
self
}
#[must_use]
pub fn name(&self) -> &str {
&self.name
}
}
impl IncomingMessage for ZmqMessage {
fn payload(&self) -> &[u8] {
&self.payload
}
fn headers(&self) -> &HeaderMap {
&self.headers
}
fn ack(self) -> impl Future<Output = Result<(), AckError>> {
ready(Err(AckError::Unsupported))
}
fn nack(self, _requeue: bool) -> impl Future<Output = Result<(), AckError>> {
ready(Err(AckError::Unsupported))
}
}