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
118120pub 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
122126impl < 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
131137impl < 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
137149impl < 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
143161impl 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