use crate::event::SecurityEvent;
mod private {
pub trait Sealed {}
}
pub trait SecurityEventEmitter: private::Sealed {
fn emit(&self, event: SecurityEvent);
}
pub fn emit_security_event(event: SecurityEvent) {
match serde_json::to_string(&event) {
Ok(json) => tracing::info!(security_event = %json, "security_event"),
Err(e) => tracing::warn!("failed to serialize security event: {e}"),
}
}
pub struct DefaultEmitter;
impl private::Sealed for DefaultEmitter {}
impl SecurityEventEmitter for DefaultEmitter {
fn emit(&self, event: SecurityEvent) {
emit_security_event(event);
}
}