hotmic 0.8.2

high-speed metrics collection library
Documentation
use fnv::FnvBuildHasher;
use hashbrown::HashMap;
use std::hash::Hash;

pub(crate) struct Gauge<T> {
    data: HashMap<T, u64, FnvBuildHasher>,
}

impl<T: Clone + Eq + Hash> Gauge<T> {
    pub fn new() -> Gauge<T> {
        Gauge {
            data: HashMap::<T, u64, FnvBuildHasher>::default(),
        }
    }

    pub fn update(&mut self, key: T, value: u64) {
        let ivalue = self.data.entry(key).or_insert(0);
        *ivalue = value;
    }

    pub fn values(&self) -> Vec<(T, u64)> { self.data.iter().map(|(k, v)| (k.clone(), *v)).collect() }
}

#[cfg(test)]
mod tests {
    use super::Gauge;

    #[test]
    fn test_gauge_simple_update() {
        let mut gauge = Gauge::new();

        let key = "foo";
        gauge.update(key, 42);

        let values = gauge.values();
        assert_eq!(values.len(), 1);
        assert_eq!(values[0].1, 42);
    }
}