alien_core/events/
handler.rs1use crate::events::{AlienEvent, EventState};
2use crate::Result;
3use async_trait::async_trait;
4use chrono::{DateTime, Utc};
5use serde::{Deserialize, Serialize};
6#[cfg(feature = "openapi")]
7use utoipa::ToSchema;
8
9#[derive(Debug, Clone, Serialize, Deserialize)]
11#[cfg_attr(feature = "openapi", derive(ToSchema))]
12#[serde(tag = "type", rename_all = "camelCase")]
13pub enum EventChange {
14 #[serde(rename_all = "camelCase")]
16 Created {
17 id: String,
19 parent_id: Option<String>,
21 created_at: DateTime<Utc>,
23 event: AlienEvent,
25 state: EventState,
27 },
28
29 #[serde(rename_all = "camelCase")]
31 Updated {
32 id: String,
34 updated_at: DateTime<Utc>,
36 event: AlienEvent,
38 },
39
40 #[serde(rename_all = "camelCase")]
42 StateChanged {
43 id: String,
45 updated_at: DateTime<Utc>,
47 new_state: EventState,
49 },
50}
51
52#[async_trait]
54pub trait EventHandler: Send + Sync {
55 async fn on_event_change(&self, change: EventChange) -> Result<()>;
57}
58
59pub struct NoOpEventHandler;
61
62#[async_trait]
63impl EventHandler for NoOpEventHandler {
64 async fn on_event_change(&self, _change: EventChange) -> Result<()> {
65 Ok(())
66 }
67}