use crate::models::AuditEvent;
use std::io;
pub trait AuditSink: Send + Sync {
fn write_event(&self, event: &AuditEvent) -> io::Result<()>;
}
impl AuditSink for VecAuditSink {
fn write_event(&self, event: &AuditEvent) -> io::Result<()> {
self.events
.lock()
.map_err(|_| io::Error::other("audit sink lock poisoned"))?
.push(event.clone());
Ok(())
}
}
#[derive(Default)]
pub struct VecAuditSink {
events: std::sync::Mutex<Vec<AuditEvent>>,
}
impl VecAuditSink {
pub fn new() -> Self {
Self::default()
}
pub fn events(&self) -> io::Result<Vec<AuditEvent>> {
Ok(self
.events
.lock()
.map_err(|_| io::Error::other("audit sink lock poisoned"))?
.clone())
}
}