use std::sync::{Arc, Mutex};
use super::{EventProducer, EventEvent};
use crate::Result;
#[derive(Clone)]
pub struct InMemoryEventPublisher {
events: Arc<Mutex<Vec<EventEvent>>>,
}
impl InMemoryEventPublisher {
pub fn new() -> Self {
Self {
events: Arc::new(Mutex::new(Vec::new())),
}
}
pub fn get_events(&self) -> Vec<EventEvent> {
self.events.lock().unwrap().clone()
}
pub fn clear(&self) {
self.events.lock().unwrap().clear();
}
pub fn event_count(&self) -> usize {
self.events.lock().unwrap().len()
}
}
impl Default for InMemoryEventPublisher {
fn default() -> Self {
Self::new()
}
}
impl EventProducer for InMemoryEventPublisher {
fn publish(&self, event: EventEvent) -> Result<()> {
tracing::info!(
"Publishing event: {} for event {}",
match &event {
EventEvent::Created { .. } => "Created",
EventEvent::Updated { .. } => "Updated",
EventEvent::Deleted { .. } => "Deleted",
EventEvent::Merged { .. } => "Merged",
EventEvent::Linked { .. } => "Linked",
EventEvent::Unlinked { .. } => "Unlinked",
},
event.event_id()
);
self.events.lock().unwrap().push(event);
Ok(())
}
}
pub struct FluvioProducer {
}
impl EventProducer for FluvioProducer {
fn publish(&self, _event: EventEvent) -> Result<()> {
todo!("Implement Fluvio event publishing")
}
}