helios_subscriptions/
event.rs1use chrono::{DateTime, Utc};
4use helios_fhir::FhirVersion;
5use helios_persistence::tenant::TenantId;
6
7#[derive(Debug, Clone)]
11pub struct ResourceEvent {
12 pub tenant_id: TenantId,
14
15 pub fhir_version: FhirVersion,
17
18 pub resource_type: String,
20
21 pub resource_id: String,
23
24 pub version_id: String,
26
27 pub event_type: ResourceEventType,
29
30 pub resource: Option<serde_json::Value>,
32
33 pub previous_resource: Option<serde_json::Value>,
35
36 pub timestamp: DateTime<Utc>,
38}
39
40#[derive(Debug, Clone, Copy, PartialEq, Eq)]
42pub enum ResourceEventType {
43 Create,
45 Update,
47 Delete,
49}
50
51impl std::fmt::Display for ResourceEventType {
52 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
53 match self {
54 Self::Create => write!(f, "create"),
55 Self::Update => write!(f, "update"),
56 Self::Delete => write!(f, "delete"),
57 }
58 }
59}
60
61#[cfg(test)]
62mod tests {
63 use super::*;
64
65 #[test]
66 fn test_event_type_display() {
67 assert_eq!(ResourceEventType::Create.to_string(), "create");
68 assert_eq!(ResourceEventType::Update.to_string(), "update");
69 assert_eq!(ResourceEventType::Delete.to_string(), "delete");
70 }
71}