nom_openmetrics/
sample.rs

1use crate::Label;
2
3/// A metric sample
4#[derive(Debug, PartialEq)]
5pub struct Sample<'a> {
6    name: &'a str,
7    labels: Vec<Label<'a>>,
8    number: f64,
9}
10
11impl<'a> Sample<'a> {
12    /// Create a `Sample` without labels
13    pub fn new(name: &'a str, number: f64) -> Self {
14        let labels = vec![];
15
16        Self {
17            name,
18            labels,
19            number,
20        }
21    }
22
23    /// Create a `Sample` with labels
24    pub fn with_labels(name: &'a str, number: f64, labels: Vec<Label<'a>>) -> Self {
25        Self {
26            name,
27            labels,
28            number,
29        }
30    }
31
32    /// Add a label to a `Sample`
33    pub fn add_label(mut self, name: &'a str, value: &str) -> Self {
34        let label = Label {
35            name,
36            value: value.into(),
37        };
38
39        self.labels.push(label);
40
41        self
42    }
43
44    /// [`Label`]s for a `Sample`
45    pub fn labels(&self) -> &[Label<'a>] {
46        &self.labels
47    }
48
49    /// The metric name
50    pub fn name(&self) -> &str {
51        self.name
52    }
53
54    /// The metric value
55    pub fn number(&self) -> f64 {
56        self.number
57    }
58}