logdash 1.0.3

Logdash.io simple client
Documentation
use crate::dispatch::DISPATCH;
use serde::Serialize;
pub struct MetricCollector(());

impl MetricCollector {
    pub(crate) fn new() -> Self {
        Self(())
    }

    #[inline(always)]
    fn send(&self, msg: MetricMessage) {
        DISPATCH.get().unwrap().dispatch_metric(msg);
    }

    pub fn set(&self, name: String, value: f64) {
        self.send(MetricMessage {
            name,
            value,
            operation: MetricOperation::Set,
        });
    }

    pub fn mutate(&self, name: String, value: f64) {
        self.send(MetricMessage {
            name,
            value,
            operation: MetricOperation::Change,
        });
    }
}

#[derive(Debug, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct MetricMessage {
    pub name: String,
    pub value: f64,
    pub operation: MetricOperation,
}

#[derive(Debug, Clone, Serialize)]
#[serde(rename_all = "camelCase")]
pub enum MetricOperation {
    Set,
    Change,
}

impl std::fmt::Display for MetricOperation {
    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
        match self {
            MetricOperation::Set => write!(f, "set"),
            MetricOperation::Change => write!(f, "change"),
        }
    }
}