use crate::event::identity::WriterId;
use crate::event::types::{AdmissionSeq, EventId};
use serde::{Deserialize, Serialize};
use std::fmt::Debug;
mod private {
pub trait Sealed {}
}
pub trait JournalEvent:
private::Sealed + 'static + Debug + Clone + Send + Sync + Serialize + for<'de> Deserialize<'de>
{
type Payload: super::payloads::JournalPayload<Event = Self>;
fn into_parts(
self,
) -> (
super::envelope::AuthoredEnvelope<
<Self::Payload as super::payloads::JournalPayload>::Provenance,
>,
Self::Payload,
);
fn from_parts(
envelope: super::envelope::AuthoredEnvelope<
<Self::Payload as super::payloads::JournalPayload>::Provenance,
>,
payload: Self::Payload,
) -> Self;
fn id(&self) -> &EventId;
fn writer_id(&self) -> &WriterId;
fn event_type_name(&self) -> &str;
fn admission_seq(&self) -> Option<AdmissionSeq> {
None
}
fn set_admission_seq(&mut self, _seq: AdmissionSeq) {}
}
#[doc(hidden)]
pub use private::Sealed;