1use serde::Serialize;
2use time::OffsetDateTime;
3
4#[derive(Debug, Clone, Serialize)]
5pub struct AuditEvent {
6 pub request_id: String,
7 pub event_type: String,
8 pub owner_id: Option<String>,
9 pub metadata: serde_json::Value,
10 #[serde(with = "time::serde::rfc3339")]
11 pub timestamp: OffsetDateTime,
12}
13
14#[derive(Debug, thiserror::Error)]
15pub enum LogError {
16 #[error("backend error: {0}")]
17 Backend(String),
18}
19
20#[async_trait::async_trait]
21pub trait AuditLogger: Send + Sync + 'static {
22 async fn log(&self, event: AuditEvent) -> Result<(), LogError>;
23 async fn ping(&self) -> Result<(), LogError>;
24}