use alloc::borrow::{Cow, ToOwned};
use alloc::vec::Vec;
use mnesis::Version;
pub struct EventMorsel<'a> {
event_type: Cow<'a, str>,
schema_version: Version,
payload: Cow<'a, [u8]>,
}
impl<'a> EventMorsel<'a> {
#[must_use]
pub fn new(event_type: &str, schema_version: Version, payload: Vec<u8>) -> Self {
Self {
event_type: Cow::Owned(event_type.to_owned()),
schema_version,
payload: Cow::Owned(payload),
}
}
#[must_use]
pub const fn borrowed(event_type: &'a str, schema_version: Version, payload: &'a [u8]) -> Self {
Self {
event_type: Cow::Borrowed(event_type),
schema_version,
payload: Cow::Borrowed(payload),
}
}
#[must_use]
pub fn event_type(&self) -> &str {
&self.event_type
}
#[must_use]
pub const fn schema_version(&self) -> Version {
self.schema_version
}
#[must_use]
pub fn payload(&self) -> &[u8] {
&self.payload
}
#[must_use]
pub const fn is_borrowed(&self) -> bool {
matches!(
(&self.event_type, &self.payload),
(Cow::Borrowed(_), Cow::Borrowed(_))
)
}
#[must_use]
pub fn with_payload(self, payload: Cow<'a, [u8]>) -> Self {
Self { payload, ..self }
}
#[must_use]
pub fn with_schema_version(self, schema_version: Version) -> Self {
Self {
schema_version,
..self
}
}
#[must_use]
pub fn with_event_type(self, event_type: Cow<'a, str>) -> Self {
Self { event_type, ..self }
}
}