Skip to main content

cqrs_rust_lib/
event.rs

1use crate::Aggregate;
2use chrono::{DateTime, Utc};
3use serde::de::DeserializeOwned;
4use serde::{Deserialize, Serialize};
5use std::collections::HashMap;
6use std::fmt::Debug;
7
8pub trait Event: Debug + Serialize + DeserializeOwned + Clone + PartialEq + Sync + Send {
9    fn event_type(&self) -> String;
10}
11
12#[derive(Debug, Clone, Serialize, Deserialize)]
13#[serde(rename_all = "camelCase")]
14pub struct EventEnvelope<A>
15where
16    A: Aggregate,
17{
18    #[serde(rename = "_id")]
19    pub event_id: String,
20    /// The id of the aggregate instance.
21    pub aggregate_id: String,
22    /// The version number for an aggregate instance.
23    pub version: usize,
24    /// Event payload.
25    pub payload: A::Event,
26    /// Additional metadata.
27    pub metadata: HashMap<String, String>,
28    /// The time when the event was created.
29    pub at: DateTime<Utc>,
30}