Skip to main content

hermod/dispatcher/backend/
mod.rs

1//! Backend trait and dispatch message type
2
3use crate::dispatcher::traits::Metric;
4use crate::protocol::types::{DetailLevel, TraceObject};
5use anyhow::Result;
6use async_trait::async_trait;
7use serde_json::Value;
8
9pub mod datapoint;
10pub mod ekg;
11pub mod forwarder;
12pub mod stdout;
13
14/// Message passed to each backend during dispatch
15#[derive(Debug, Clone)]
16pub struct DispatchMessage {
17    /// The fully assembled `TraceObject` (for the Forwarder backend)
18    pub trace_object: TraceObject,
19    /// Pre-rendered human string (may be empty — backends fall back to machine JSON)
20    pub human: String,
21    /// Machine-readable JSON value
22    pub machine: Value,
23    /// Metrics emitted by this trace message
24    pub metrics: Vec<Metric>,
25    /// Detail level that was used to format `machine`
26    pub detail: DetailLevel,
27}
28
29/// Trait implemented by every backend
30#[async_trait]
31pub trait Backend: Send + Sync {
32    /// Dispatch a single trace message to this backend
33    async fn dispatch(&self, msg: &DispatchMessage) -> Result<()>;
34}