use reliar_core::{ConversationId, CorrelationId, Envelope, MessageId, MessageType};
#[derive(Clone, Copy, Debug)]
#[non_exhaustive]
pub struct InboxMessage<'a> {
pub id: MessageId,
pub message_type: &'a MessageType,
pub conversation_id: ConversationId,
pub correlation_id: Option<&'a CorrelationId>,
pub causation_id: Option<MessageId>,
}
impl<'a> InboxMessage<'a> {
#[must_use]
pub const fn new(id: MessageId, message_type: &'a MessageType) -> Self {
Self {
id,
message_type,
conversation_id: ConversationId::UNSET,
correlation_id: None,
causation_id: None,
}
}
#[must_use]
pub fn from_envelope<T>(envelope: &'a Envelope<T>) -> Self {
Self {
id: envelope.id,
message_type: &envelope.message_type,
conversation_id: envelope.metadata.correlation.conversation_id,
correlation_id: envelope.metadata.correlation.correlation_id.as_ref(),
causation_id: envelope.metadata.correlation.causation_id,
}
}
#[must_use]
pub const fn conversation(mut self, conversation_id: ConversationId) -> Self {
self.conversation_id = conversation_id;
self
}
#[must_use]
pub const fn correlation(mut self, correlation_id: &'a CorrelationId) -> Self {
self.correlation_id = Some(correlation_id);
self
}
#[must_use]
pub const fn causation(mut self, causation_id: MessageId) -> Self {
self.causation_id = Some(causation_id);
self
}
}