@@ -37,6 +37,7 @@ use crate::metrics::{counter, gauge, MetricType, TypedMetric};
3737use crate :: registry:: Registry ;
3838use std:: collections:: HashMap ;
3939use std:: ops:: Deref ;
40+ use std:: vec:: IntoIter ;
4041
4142pub fn encode < M > ( registry : & Registry < M > ) -> openmetrics_data_model:: MetricSet
4243where
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 {
7980pub 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
107102impl < 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 >
210201where
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 >
289277where
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 >
328313where
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 >
379358where
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 >
445421where
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