Skip to content

Commit da84323

Browse files
committed
Make EncodeLabel::encode return iterator
1 parent 181fdd7 commit da84323

1 file changed

Lines changed: 33 additions & 13 deletions

File tree

src/encoding/proto.rs

Lines changed: 33 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,9 @@ where
5656
family.unit = unit.as_str().to_string();
5757
}
5858
family.help = desc.help().to_string();
59-
family.metrics = metric.encode(desc.labels().encode()).collect::<Vec<_>>();
59+
family.metrics = metric
60+
.encode(desc.labels().encode().collect::<Vec<_>>())
61+
.collect::<Vec<_>>();
6062

6163
metric_set.metric_families.push(family);
6264
}
@@ -116,33 +118,51 @@ impl EncodeMetric
116118
}
117119

118120
pub trait EncodeLabel {
119-
fn encode(&self) -> Vec<openmetrics_data_model::Label>;
121+
type Iterator: Iterator<Item = openmetrics_data_model::Label>;
122+
123+
fn encode(&self) -> Self::Iterator;
120124
}
121125

122126
impl<K: ToString, V: ToString> EncodeLabel for (K, V) {
123-
fn encode(&self) -> Vec<openmetrics_data_model::Label> {
127+
type Iterator = IntoIter<openmetrics_data_model::Label>;
128+
129+
fn encode(&self) -> Self::Iterator {
124130
let mut label = openmetrics_data_model::Label::default();
125131
label.name = self.0.to_string();
126132
label.value = self.1.to_string();
127-
vec![label]
133+
vec![label].into_iter()
128134
}
129135
}
130136

131137
impl<T: EncodeLabel> EncodeLabel for Vec<T> {
132-
fn encode(&self) -> Vec<openmetrics_data_model::Label> {
133-
self.iter().map(|t| t.encode()).flatten().collect()
138+
type Iterator = IntoIter<openmetrics_data_model::Label>;
139+
140+
fn encode(&self) -> Self::Iterator {
141+
self.iter()
142+
.map(|t| t.encode())
143+
.flatten()
144+
.collect::<Vec<_>>()
145+
.into_iter()
134146
}
135147
}
136148

137149
impl<T: EncodeLabel> EncodeLabel for &[T] {
138-
fn encode(&self) -> Vec<openmetrics_data_model::Label> {
139-
self.iter().map(|t| t.encode()).flatten().collect()
150+
type Iterator = IntoIter<openmetrics_data_model::Label>;
151+
152+
fn encode(&self) -> Self::Iterator {
153+
self.iter()
154+
.map(|t| t.encode())
155+
.flatten()
156+
.collect::<Vec<_>>()
157+
.into_iter()
140158
}
141159
}
142160

143161
impl EncodeLabel for () {
144-
fn encode(&self) -> Vec<openmetrics_data_model::Label> {
145-
vec![]
162+
type Iterator = IntoIter<openmetrics_data_model::Label>;
163+
164+
fn encode(&self) -> Self::Iterator {
165+
vec![].into_iter()
146166
}
147167
}
148168

@@ -154,7 +174,7 @@ where
154174
{
155175
let mut exemplar_proto = openmetrics_data_model::Exemplar::default();
156176
exemplar_proto.value = exemplar.value.clone().into();
157-
exemplar_proto.label = exemplar.label_set.encode();
177+
exemplar_proto.label = exemplar.label_set.encode().collect::<Vec<_>>();
158178

159179
exemplar_proto
160180
}
@@ -322,7 +342,7 @@ where
322342

323343
let guard = self.read();
324344
for (label_set, metric) in guard.iter() {
325-
let mut label = label_set.encode();
345+
let mut label = label_set.encode().collect::<Vec<_>>();
326346
label.append(&mut labels.clone());
327347
metrics.extend(metric.encode(label));
328348
}
@@ -429,7 +449,7 @@ where
429449
metric.metric_points = {
430450
let mut metric_point = openmetrics_data_model::MetricPoint::default();
431451
metric_point.value = {
432-
let mut label = self.0.encode();
452+
let mut label = self.0.encode().collect::<Vec<_>>();
433453
label.append(&mut labels.clone());
434454

435455
let mut info_value = openmetrics_data_model::InfoValue::default();

0 commit comments

Comments
 (0)