use crate::events::{AlienEvent, EventState};
use crate::Result;
use async_trait::async_trait;
use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
#[cfg(feature = "openapi")]
use utoipa::ToSchema;
#[derive(Debug, Clone, Serialize, Deserialize)]
#[cfg_attr(feature = "openapi", derive(ToSchema))]
#[serde(tag = "type", rename_all = "camelCase")]
pub enum EventChange {
#[serde(rename_all = "camelCase")]
Created {
id: String,
parent_id: Option<String>,
created_at: DateTime<Utc>,
event: AlienEvent,
state: EventState,
},
#[serde(rename_all = "camelCase")]
Updated {
id: String,
updated_at: DateTime<Utc>,
event: AlienEvent,
},
#[serde(rename_all = "camelCase")]
StateChanged {
id: String,
updated_at: DateTime<Utc>,
new_state: EventState,
},
}
#[async_trait]
pub trait EventHandler: Send + Sync {
async fn on_event_change(&self, change: EventChange) -> Result<()>;
}
pub struct NoOpEventHandler;
#[async_trait]
impl EventHandler for NoOpEventHandler {
async fn on_event_change(&self, _change: EventChange) -> Result<()> {
Ok(())
}
}