metrics_prometheus_client/metrics/
mod.rs

1use prometheus_client::{
2    encoding::{EncodeMetric, MetricEncoder},
3    metrics::MetricType,
4};
5
6pub use self::{counter::*, gauge::*, histogram::*};
7use std::{fmt, sync::Arc};
8
9mod counter;
10mod gauge;
11mod histogram;
12
13#[derive(Debug)]
14pub enum Metric {
15    Counter(Arc<MetricsCounter>),
16    Gauge(Arc<MetricsGauge>),
17    Histogram(Arc<MetricsHistogram>),
18}
19
20impl EncodeMetric for Metric {
21    fn encode(&self, encoder: MetricEncoder) -> Result<(), fmt::Error> {
22        match self {
23            Metric::Counter(counter) => counter.inner.encode(encoder),
24            Metric::Gauge(gauge) => gauge.inner.encode(encoder),
25            Metric::Histogram(hist) => hist.inner.encode(encoder),
26        }
27    }
28
29    fn metric_type(&self) -> MetricType {
30        match self {
31            Metric::Counter(_) => MetricType::Counter,
32            Metric::Gauge(_) => MetricType::Gauge,
33            Metric::Histogram(_) => MetricType::Histogram,
34        }
35    }
36}