metrics_util/registry/
storage.rs1use std::sync::Arc;
2
3use metrics::{atomics::AtomicU64, CounterFn, GaugeFn, HistogramFn};
4
5use crate::storage::AtomicBucket;
6
7pub trait Storage<K> {
9 type Counter: CounterFn + Clone;
11
12 type Gauge: GaugeFn + Clone;
14
15 type Histogram: HistogramFn + Clone;
17
18 fn counter(&self, key: &K) -> Self::Counter;
20
21 fn gauge(&self, key: &K) -> Self::Gauge;
23
24 fn histogram(&self, key: &K) -> Self::Histogram;
26}
27
28#[derive(Debug)]
33pub struct AtomicStorage;
34
35impl<K> Storage<K> for AtomicStorage {
36 type Counter = Arc<AtomicU64>;
37 type Gauge = Arc<AtomicU64>;
38 type Histogram = Arc<AtomicBucket<f64>>;
39
40 fn counter(&self, _: &K) -> Self::Counter {
41 Arc::new(AtomicU64::new(0))
42 }
43
44 fn gauge(&self, _: &K) -> Self::Gauge {
45 Arc::new(AtomicU64::new(0))
46 }
47
48 fn histogram(&self, _: &K) -> Self::Histogram {
49 Arc::new(AtomicBucket::new())
50 }
51}