custom_value_type/
custom-value-type.rs1use cadence::ext::{MetricValue, ToGaugeValue};
14use cadence::prelude::*;
15use cadence::{MetricResult, NopMetricSink, StatsdClient};
16
17enum UserHappiness {
18 VeryHappy,
19 KindaHappy,
20 Sad,
21}
22
23impl ToGaugeValue for UserHappiness {
24 fn try_to_value(self) -> MetricResult<MetricValue> {
25 let v = match self {
26 UserHappiness::VeryHappy => 1.0,
27 UserHappiness::KindaHappy => 0.5,
28 UserHappiness::Sad => 0.0,
29 };
30
31 Ok(MetricValue::Float(v))
32 }
33}
34
35fn main() {
36 let sink = NopMetricSink;
37 let client = StatsdClient::from_sink("example.prefix", sink);
38
39 client.gauge("user.happiness", UserHappiness::VeryHappy).unwrap();
40 client.gauge("user.happiness", UserHappiness::KindaHappy).unwrap();
41 client.gauge("user.happiness", UserHappiness::Sad).unwrap();
42}