Skip to main content

weavatrix_memory/domain/
event.rs

1use super::{Evidence, MemoryFact, MemoryNode};
2use crate::{id::FactId, time::Timestamp};
3use serde::{Deserialize, Serialize};
4
5#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
6#[serde(tag = "type", rename_all = "snake_case")]
7pub enum MemoryEvent {
8    NodeUpserted {
9        node: MemoryNode,
10    },
11    FactRecorded {
12        fact: MemoryFact,
13    },
14    FactRetracted {
15        fact_id: FactId,
16        valid_until: Timestamp,
17        evidence: Vec<Evidence>,
18    },
19}
20
21impl MemoryEvent {
22    #[must_use]
23    pub const fn event_type(&self) -> &'static str {
24        match self {
25            Self::NodeUpserted { .. } => "node_upserted",
26            Self::FactRecorded { .. } => "fact_recorded",
27            Self::FactRetracted { .. } => "fact_retracted",
28        }
29    }
30}