use std::sync::{Arc, Mutex};
use super::{EventProducer, WorkerEvent};
use crate::Result;
#[derive(Clone)]
pub struct InMemoryEventPublisher {
events: Arc<Mutex<Vec<WorkerEvent>>>,
}
impl InMemoryEventPublisher {
pub fn new() -> Self {
Self {
events: Arc::new(Mutex::new(Vec::new())),
}
}
pub fn get_events(&self) -> Vec<WorkerEvent> {
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: WorkerEvent) -> Result<()> {
tracing::info!(
"Publishing event: {} for worker {}",
match &event {
WorkerEvent::Created { .. } => "Created",
WorkerEvent::Updated { .. } => "Updated",
WorkerEvent::Deleted { .. } => "Deleted",
WorkerEvent::Merged { .. } => "Merged",
WorkerEvent::Linked { .. } => "Linked",
WorkerEvent::Unlinked { .. } => "Unlinked",
},
event.worker_id()
);
self.events.lock().unwrap().push(event);
Ok(())
}
}
pub struct FluvioProducer {
}
impl EventProducer for FluvioProducer {
fn publish(&self, _event: WorkerEvent) -> Result<()> {
todo!("Implement Fluvio event publishing")
}
}