use async_trait::async_trait;
#[async_trait]
pub trait Tracer: Send + Sync {
async fn start_span(&self, name: &str) -> Box<dyn Span + Send>;
async fn event(&self, name: &str, attrs: &[(&str, &str)]);
}
pub trait Span: Send {
fn set_attr(&mut self, key: &str, value: &str);
}
pub struct NoopTracer;
#[async_trait]
impl Tracer for NoopTracer {
async fn start_span(&self, _name: &str) -> Box<dyn Span + Send> {
Box::new(NoopSpan)
}
async fn event(&self, _name: &str, _attrs: &[(&str, &str)]) {}
}
pub struct NoopSpan;
impl Span for NoopSpan {
fn set_attr(&mut self, _key: &str, _value: &str) {}
}
#[async_trait]
pub trait AuditSink: Send + Sync {
async fn record(&self, category: &str, payload_json: &str);
}
pub struct NoopAudit;
#[async_trait]
impl AuditSink for NoopAudit {
async fn record(&self, _category: &str, _payload_json: &str) {}
}