use std::time::SystemTime;
#[cfg(feature = "derive")]
#[doc(inline)]
pub use esrc_derive::TryFromEnvelope;
use uuid::Uuid;
use crate::error;
use crate::event::{Event, Sequence};
use crate::version::DeserializeVersion;
pub trait Envelope: Send {
fn id(&self) -> Uuid;
fn sequence(&self) -> Sequence;
fn timestamp(&self) -> SystemTime;
fn name(&self) -> &str;
fn deserialize<'de, E>(&'de self) -> error::Result<E>
where
E: DeserializeVersion<'de> + Event;
}
pub trait TryFromEnvelope<'de>: Sized {
fn try_from_envelope(envelope: &'de impl Envelope) -> error::Result<Self>;
}
impl<'de, E> TryFromEnvelope<'de> for E
where
E: DeserializeVersion<'de> + Event,
{
fn try_from_envelope(envelope: &'de impl Envelope) -> error::Result<Self> {
envelope.deserialize()
}
}