use actix::Message;
use chrono::DateTime;
use serde::Serialize;
use uuid::Uuid;
#[derive(sqlx::FromRow, Debug, Clone, Message, Serialize)]
#[rtype("()")]
pub struct RecordedEvent {
pub(crate) event_number: i64,
pub(crate) event_uuid: Uuid,
pub stream_uuid: String,
pub(crate) stream_version: Option<i64>,
pub causation_id: Option<Uuid>,
pub correlation_id: Option<Uuid>,
pub event_type: String,
pub data: serde_json::Value,
pub(crate) metadata: Option<String>,
pub(crate) created_at: DateTime<chrono::offset::Utc>,
}
impl RecordedEvent {
pub fn try_deserialize<
'de,
T: serde::Deserialize<'de> + crate::Event + serde::de::Deserialize<'de>,
>(
&'de self,
) -> Result<T, RecordedEventError> {
match T::deserialize(&self.data) {
Ok(e) => Ok(e),
Err(_) => Err(RecordedEventError::Deserialize),
}
}
}
#[derive(Debug, Clone, Message)]
#[rtype("()")]
pub struct RecordedEvents {
events: Vec<RecordedEvent>,
}
pub enum RecordedEventError {
Deserialize,
}