1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
use crate::api::metrics;

pub trait Gauge<T, LS>: metrics::Instrument<LS>
where
    T: Into<metrics::value::MeasurementValue>,
    LS: metrics::LabelSet,
{
    type Handle: GaugeHandle<T>;
    // Creates a Measurement object to use with batch recording.
    fn measurement(&self, value: T) -> metrics::Measurement<LS>;

    fn acquire_handle(&self, labels: &LS) -> Self::Handle;

    fn set(&self, value: T, label_set: &LS) {
        self.record_one(value.into(), label_set)
    }
}

pub trait GaugeHandle<T>: metrics::InstrumentHandle
where
    T: Into<metrics::value::MeasurementValue>,
{
    fn set(&self, value: T) {
        self.record_one(value.into())
    }
}