Skip to main content

metrickit/
histogram.rs

1use serde::{Deserialize, Serialize};
2
3use crate::average::Measurement;
4
5/// Rust representation of `MetricKit`'s `MXHistogramBucket`.
6#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
7#[serde(rename_all = "camelCase")]
8pub struct HistogramBucket {
9    /// Mirrors `MXHistogramBucket.bucketStart`.
10    pub bucket_start: Measurement,
11    /// Mirrors `MXHistogramBucket.bucketEnd`.
12    pub bucket_end: Measurement,
13    /// Mirrors `MXHistogramBucket.bucketCount`.
14    pub bucket_count: u64,
15}
16
17/// Rust representation of `MetricKit`'s `MXHistogram`.
18#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
19#[serde(rename_all = "camelCase")]
20pub struct Histogram {
21    /// Mirrors `MXHistogram.totalBucketCount`.
22    pub total_bucket_count: usize,
23    /// Mirrors `MXHistogram.bucketEnumerator` as collected Rust buckets.
24    #[serde(default)]
25    pub buckets: Vec<HistogramBucket>,
26}
27
28impl Histogram {
29    /// Returns whether this `MXHistogram` has no recorded buckets.
30    #[must_use]
31    pub fn is_empty(&self) -> bool {
32        self.total_bucket_count == 0 || self.buckets.is_empty()
33    }
34
35    /// Returns the `MXHistogramBucket` entries in order.
36    #[must_use]
37    pub fn buckets(&self) -> &[HistogramBucket] {
38        &self.buckets
39    }
40}