use serde::de::DeserializeOwned;
use serde_json::Value;
#[derive(Debug, Clone)]
pub struct CapturedEvent {
pub trail: String,
pub time_ms: u64,
pub source: String,
pub seq: u64,
pub payload: Value,
}
#[derive(Debug, Clone)]
pub struct TypedEntry<T> {
pub event: T,
pub time_ms: u64,
pub source: String,
pub seq: u64,
}
impl<T: DeserializeOwned> TypedEntry<T> {
#[must_use]
pub fn deserialize(e: &CapturedEvent) -> Option<Self> {
let event: T = serde_json::from_value(e.payload.clone()).ok()?;
Some(Self {
event,
time_ms: e.time_ms,
source: e.source.clone(),
seq: e.seq,
})
}
}