Skip to content

Commit 181fdd7

Browse files
committed
Fix life parameter issue
Build error: error[E0207]: the lifetime parameter `'a` is not constrained by the impl trait, self type, or predicates --> src/encoding/proto.rs:199:6 | 199 | impl<'a, N, A> EncodeMetric for Counter<N, A> | ^^ unconstrained lifetime parameter
1 parent e4c46df commit 181fdd7

1 file changed

Lines changed: 39 additions & 66 deletions

File tree

src/encoding/proto.rs

Lines changed: 39 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ use crate::metrics::{counter, gauge, MetricType, TypedMetric};
3737
use crate::registry::Registry;
3838
use std::collections::HashMap;
3939
use std::ops::Deref;
40+
use std::vec::IntoIter;
4041

4142
pub fn encode<M>(registry: &Registry<M>) -> openmetrics_data_model::MetricSet
4243
where
@@ -55,7 +56,7 @@ where
5556
family.unit = unit.as_str().to_string();
5657
}
5758
family.help = desc.help().to_string();
58-
family.metrics = metric.encode(desc.labels().encode());
59+
family.metrics = metric.encode(desc.labels().encode()).collect::<Vec<_>>();
5960

6061
metric_set.metric_families.push(family);
6162
}
@@ -79,21 +80,15 @@ impl From<MetricType> for openmetrics_data_model::MetricType {
7980
pub trait EncodeMetric {
8081
type Iterator: Iterator<Item = openmetrics_data_model::Metric>;
8182

82-
fn encode(
83-
&self,
84-
labels: Vec<openmetrics_data_model::Label>,
85-
) -> Self::Iterator;
83+
fn encode(&self, labels: Vec<openmetrics_data_model::Label>) -> Self::Iterator;
8684

8785
fn metric_type(&self) -> MetricType;
8886
}
8987

90-
impl<'a> EncodeMetric for Box<dyn EncodeMetric<Iterator = std::slice::Iter<'a, openmetrics_data_model::Metric>>> {
91-
type Iterator = std::slice::Iter<'a, openmetrics_data_model::Metric>;
92-
93-
fn encode(
94-
&self,
95-
labels: Vec<openmetrics_data_model::Label>,
96-
) -> Self::Iterator {
88+
impl EncodeMetric for Box<dyn EncodeMetric<Iterator = IntoIter<openmetrics_data_model::Metric>>> {
89+
type Iterator = IntoIter<openmetrics_data_model::Metric>;
90+
91+
fn encode(&self, labels: Vec<openmetrics_data_model::Label>) -> Self::Iterator {
9792
self.deref().encode(labels)
9893
}
9994

@@ -106,13 +101,12 @@ pub trait SendEncodeMetric: EncodeMetric + Send {}
106101

107102
impl<T: EncodeMetric + Send> SendEncodeMetric for T {}
108103

109-
impl<'a> EncodeMetric for Box<dyn SendEncodeMetric<Iterator = std::slice::Iter<'a, openmetrics_data_model::Metric>>> {
110-
type Iterator = std::slice::Iter<'a, openmetrics_data_model::Metric>;
104+
impl EncodeMetric
105+
for Box<dyn SendEncodeMetric<Iterator = IntoIter<openmetrics_data_model::Metric>>>
106+
{
107+
type Iterator = IntoIter<openmetrics_data_model::Metric>;
111108

112-
fn encode(
113-
&self,
114-
labels: Vec<openmetrics_data_model::Label>,
115-
) -> Self::Iterator {
109+
fn encode(&self, labels: Vec<openmetrics_data_model::Label>) -> Self::Iterator {
116110
self.deref().encode(labels)
117111
}
118112

@@ -189,36 +183,30 @@ where
189183
N: EncodeCounterValue,
190184
A: counter::Atomic<N>,
191185
{
192-
type Iterator = std::slice::Iter<'a, openmetrics_data_model::Metric>;
186+
type Iterator = IntoIter<openmetrics_data_model::Metric>;
193187

194-
fn encode(
195-
&self,
196-
labels: Vec<openmetrics_data_model::Label>,
197-
) -> Self::Iterator {
188+
fn encode(&self, labels: Vec<openmetrics_data_model::Label>) -> Self::Iterator {
198189
let mut metric = encode_counter_with_maybe_exemplar(self.get(), None);
199190
metric.labels = labels;
200191

201-
vec![metric].iter()
192+
vec![metric].into_iter()
202193
}
203194

204195
fn metric_type(&self) -> MetricType {
205196
Self::TYPE
206197
}
207198
}
208199

209-
impl<'a, S, N, A> EncodeMetric for CounterWithExemplar<S, N, A>
200+
impl<S, N, A> EncodeMetric for CounterWithExemplar<S, N, A>
210201
where
211202
S: EncodeLabel,
212203
N: Clone + EncodeCounterValue,
213204
A: counter::Atomic<N>,
214205
f64: From<N>,
215206
{
216-
type Iterator = std::slice::Iter<'a, openmetrics_data_model::Metric>;
207+
type Iterator = IntoIter<openmetrics_data_model::Metric>;
217208

218-
fn encode(
219-
&self,
220-
labels: Vec<openmetrics_data_model::Label>,
221-
) -> Self::Iterator {
209+
fn encode(&self, labels: Vec<openmetrics_data_model::Label>) -> Self::Iterator {
222210
let (value, exemplar) = self.get();
223211

224212
let exemplar_proto = if let Some(e) = exemplar.as_ref() {
@@ -230,7 +218,7 @@ where
230218
let mut metric = encode_counter_with_maybe_exemplar(value.clone(), exemplar_proto);
231219
metric.labels = labels;
232220

233-
vec![metric].iter()
221+
vec![metric].into_iter()
234222
}
235223

236224
fn metric_type(&self) -> MetricType {
@@ -285,17 +273,14 @@ impl EncodeGaugeValue for f64 {
285273
}
286274
}
287275

288-
impl<'a, N, A> EncodeMetric for Gauge<N, A>
276+
impl<N, A> EncodeMetric for Gauge<N, A>
289277
where
290278
N: EncodeGaugeValue,
291279
A: gauge::Atomic<N>,
292280
{
293-
type Iterator = std::slice::Iter<'a, openmetrics_data_model::Metric>;
281+
type Iterator = IntoIter<openmetrics_data_model::Metric>;
294282

295-
fn encode(
296-
&self,
297-
labels: Vec<openmetrics_data_model::Label>,
298-
) -> Self::Iterator {
283+
fn encode(&self, labels: Vec<openmetrics_data_model::Label>) -> Self::Iterator {
299284
let mut metric = openmetrics_data_model::Metric::default();
300285

301286
metric.metric_points = {
@@ -313,7 +298,7 @@ where
313298
};
314299

315300
metric.labels = labels;
316-
vec![metric].iter()
301+
vec![metric].into_iter()
317302
}
318303

319304
fn metric_type(&self) -> MetricType {
@@ -324,18 +309,15 @@ where
324309
/////////////////////////////////////////////////////////////////////////////////
325310
// Family
326311

327-
impl<'a, S, M, C> EncodeMetric for Family<S, M, C>
312+
impl<S, M, C> EncodeMetric for Family<S, M, C>
328313
where
329314
S: Clone + std::hash::Hash + Eq + EncodeLabel,
330315
M: EncodeMetric + TypedMetric,
331316
C: MetricConstructor<M>,
332317
{
333-
type Iterator = std::slice::Iter<'a, openmetrics_data_model::Metric>;
318+
type Iterator = IntoIter<openmetrics_data_model::Metric>;
334319

335-
fn encode(
336-
&self,
337-
labels: Vec<openmetrics_data_model::Label>,
338-
) -> Self::Iterator {
320+
fn encode(&self, labels: Vec<openmetrics_data_model::Label>) -> Self::Iterator {
339321
let mut metrics = vec![];
340322

341323
let guard = self.read();
@@ -345,7 +327,7 @@ where
345327
metrics.extend(metric.encode(label));
346328
}
347329

348-
metrics.iter()
330+
metrics.into_iter()
349331
}
350332

351333
fn metric_type(&self) -> MetricType {
@@ -356,41 +338,35 @@ where
356338
/////////////////////////////////////////////////////////////////////////////////
357339
// Histogram
358340

359-
impl<'a> EncodeMetric for Histogram {
360-
type Iterator = std::slice::Iter<'a, openmetrics_data_model::Metric>;
341+
impl EncodeMetric for Histogram {
342+
type Iterator = IntoIter<openmetrics_data_model::Metric>;
361343

362-
fn encode(
363-
&self,
364-
labels: Vec<openmetrics_data_model::Label>,
365-
) -> Self::Iterator {
344+
fn encode(&self, labels: Vec<openmetrics_data_model::Label>) -> Self::Iterator {
366345
let (sum, count, buckets) = self.get();
367346
// TODO: Would be better to use never type instead of `()`.
368347
let mut metric = encode_histogram_with_maybe_exemplars::<()>(sum, count, &buckets, None);
369348
metric.labels = labels;
370-
vec![metric].iter()
349+
vec![metric].into_iter()
371350
}
372351

373352
fn metric_type(&self) -> MetricType {
374353
Self::TYPE
375354
}
376355
}
377356

378-
impl<'a, S> EncodeMetric for HistogramWithExemplars<S>
357+
impl<S> EncodeMetric for HistogramWithExemplars<S>
379358
where
380359
S: EncodeLabel,
381360
{
382-
type Iterator = std::slice::Iter<'a, openmetrics_data_model::Metric>;
361+
type Iterator = IntoIter<openmetrics_data_model::Metric>;
383362

384-
fn encode(
385-
&self,
386-
labels: Vec<openmetrics_data_model::Label>,
387-
) -> Self::Iterator {
363+
fn encode(&self, labels: Vec<openmetrics_data_model::Label>) -> Self::Iterator {
388364
let inner = self.inner();
389365
let (sum, count, buckets) = inner.histogram.get();
390366
let mut metric =
391367
encode_histogram_with_maybe_exemplars(sum, count, &buckets, Some(&inner.exemplars));
392368
metric.labels = labels;
393-
vec![metric].iter()
369+
vec![metric].into_iter()
394370
}
395371

396372
fn metric_type(&self) -> MetricType {
@@ -441,16 +417,13 @@ fn encode_histogram_with_maybe_exemplars<S: EncodeLabel>(
441417
/////////////////////////////////////////////////////////////////////////////////
442418
// Info
443419

444-
impl<'a, S> EncodeMetric for Info<S>
420+
impl<S> EncodeMetric for Info<S>
445421
where
446422
S: EncodeLabel,
447423
{
448-
type Iterator = std::slice::Iter<'a, openmetrics_data_model::Metric>;
424+
type Iterator = IntoIter<openmetrics_data_model::Metric>;
449425

450-
fn encode(
451-
&self,
452-
labels: Vec<openmetrics_data_model::Label>,
453-
) -> Self::Iterator {
426+
fn encode(&self, labels: Vec<openmetrics_data_model::Label>) -> Self::Iterator {
454427
let mut metric = openmetrics_data_model::Metric::default();
455428

456429
metric.metric_points = {
@@ -470,7 +443,7 @@ where
470443
vec![metric_point]
471444
};
472445

473-
vec![metric].iter()
446+
vec![metric].into_iter()
474447
}
475448

476449
fn metric_type(&self) -> MetricType {

0 commit comments

Comments
 (0)