use bincode;
use serde::{de::DeserializeOwned, ser::Serialize};
use std::fmt::Debug;
pub trait EventType: Serialize + DeserializeOwned + Debug + Send + 'static {}
impl<T: Serialize + DeserializeOwned + Debug + Send + 'static> EventType for T {}
#[derive(Debug)]
pub struct Event<T>
where
T: EventType,
{
pub content: T,
}
impl<T> Event<T>
where
T: EventType,
{
pub fn new(content: T) -> Self {
Event { content }
}
pub fn serialize(&self) -> Result<Vec<u8>, String> {
bincode::serde::encode_to_vec(&self.content, bincode::config::standard())
.map_err(|e| e.to_string())
}
pub fn deserialize(evt: &[u8]) -> Result<Self, String> {
Ok(Self::new(
bincode::serde::decode_from_slice::<T, _>(evt, bincode::config::standard())
.map_err(|e| e.to_string())?
.0,
))
}
}