use super::{entry::EventEntry, finalized::FinalizedEvent, origin::Origin, Id, Msg};
pub trait IntermediaryEvent<K, M, T>
where
Self: std::marker::Sized,
K: Id,
M: Msg,
T: EventEntry<K, M>,
{
fn new(event_id: K, msg: Option<impl Into<M>>, origin: Origin) -> Self;
fn get_entry(&self) -> &T;
fn take_entry(&mut self) -> T;
fn get_event_id(&self) -> &K {
self.get_entry().get_event_id()
}
fn finalize(self) -> FinalizedEvent<K> {
let entry_id = self.get_entry().get_entry_id();
let captured_event = FinalizedEvent::new(
self.get_event_id().clone(),
entry_id,
);
drop(self);
captured_event
}
fn into_event_id(self) -> K {
self.finalize().into_event_id()
}
}