metrics_util/registry/
storage.rs
1use std::sync::Arc;
2
3use metrics::{atomics::AtomicU64, CounterFn, GaugeFn, HistogramFn};
4
5use crate::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
28pub struct AtomicStorage;
33
34impl<K> Storage<K> for AtomicStorage {
35 type Counter = Arc<AtomicU64>;
36 type Gauge = Arc<AtomicU64>;
37 type Histogram = Arc<AtomicBucket<f64>>;
38
39 fn counter(&self, _: &K) -> Self::Counter {
40 Arc::new(AtomicU64::new(0))
41 }
42
43 fn gauge(&self, _: &K) -> Self::Gauge {
44 Arc::new(AtomicU64::new(0))
45 }
46
47 fn histogram(&self, _: &K) -> Self::Histogram {
48 Arc::new(AtomicBucket::new())
49 }
50}