use std::time::SystemTime;
use static_assertions::assert_impl_all;
use crate::message::{MessageAddress, OutboundEnvelope};
#[derive(Clone, Debug)]
pub struct MessageContext<S> {
pub(crate) message: S,
pub(crate) timestamp: SystemTime,
pub(crate) origin_envelope: OutboundEnvelope,
pub(crate) reply_envelope: OutboundEnvelope,
}
impl<S> MessageContext<S> {
pub fn origin_envelope(&self) -> OutboundEnvelope {
self.origin_envelope.clone()
}
pub fn reply_envelope(&self) -> OutboundEnvelope {
self.reply_envelope.clone()
}
pub fn new_envelope(&self, recipient: &MessageAddress) -> OutboundEnvelope {
OutboundEnvelope::new_with_recipient(
self.reply_envelope.return_address.clone(),
recipient.clone(),
)
}
pub fn message(&self) -> &S {
&self.message
}
pub fn timestamp(&self) -> &SystemTime {
&self.timestamp
}
}
assert_impl_all!(MessageContext<u32>: Send);