Skip to main content

kimetsu_core/
event.rs

1use serde::{Deserialize, Serialize};
2use serde_json::Value;
3use time::OffsetDateTime;
4
5use crate::EVENT_SCHEMA_VERSION;
6use crate::ids::{EventId, RunId};
7
8#[derive(Debug, Clone, Serialize, Deserialize)]
9pub struct Event {
10    pub event_id: EventId,
11    pub run_id: RunId,
12    #[serde(with = "time::serde::rfc3339")]
13    pub ts: OffsetDateTime,
14    pub parent_event_id: Option<EventId>,
15    pub kind: String,
16    pub schema_version: u32,
17    pub payload: Value,
18}
19
20impl Event {
21    pub fn new(run_id: RunId, kind: impl Into<String>, payload: Value) -> Self {
22        Self {
23            event_id: EventId::new(),
24            run_id,
25            ts: OffsetDateTime::now_utc(),
26            parent_event_id: None,
27            kind: kind.into(),
28            schema_version: EVENT_SCHEMA_VERSION,
29            payload,
30        }
31    }
32
33    pub fn with_parent(mut self, parent_event_id: EventId) -> Self {
34        self.parent_event_id = Some(parent_event_id);
35        self
36    }
37}