@@ -288,6 +288,68 @@ impl MetricEncoder<'_> {
288288
289289 Ok ( ( ) )
290290 }
291+
292+ pub fn encode_native_histogram (
293+ & mut self ,
294+ sum : f64 ,
295+ count : u64 ,
296+ schema : i32 ,
297+ zero_threshold : f64 ,
298+ zero_count : u64 ,
299+ negative_spans : & [ ( i32 , u32 ) ] ,
300+ negative_deltas : & [ i64 ] ,
301+ positive_spans : & [ ( i32 , u32 ) ] ,
302+ positive_deltas : & [ i64 ] ,
303+ ) -> Result < ( ) , std:: fmt:: Error > {
304+ let negative_span = negative_spans
305+ . iter ( )
306+ . map (
307+ |( offset, length) | openmetrics_data_model:: histogram_value:: BucketSpan {
308+ offset : * offset,
309+ length : * length,
310+ } ,
311+ )
312+ . collect ( ) ;
313+
314+ let positive_span = positive_spans
315+ . iter ( )
316+ . map (
317+ |( offset, length) | openmetrics_data_model:: histogram_value:: BucketSpan {
318+ offset : * offset,
319+ length : * length,
320+ } ,
321+ )
322+ . collect ( ) ;
323+
324+ self . family . push ( openmetrics_data_model:: Metric {
325+ labels : self . labels . clone ( ) ,
326+ metric_points : vec ! [ openmetrics_data_model:: MetricPoint {
327+ value: Some ( openmetrics_data_model:: metric_point:: Value :: HistogramValue (
328+ openmetrics_data_model:: HistogramValue {
329+ count,
330+ created: None ,
331+ buckets: Vec :: new( ) ,
332+ sum: Some ( openmetrics_data_model:: histogram_value:: Sum :: DoubleValue (
333+ sum,
334+ ) ) ,
335+ schema,
336+ zero_threshold,
337+ zero_count,
338+ negative_span,
339+ negative_delta: negative_deltas. to_vec( ) ,
340+ negative_count: Vec :: new( ) ,
341+ positive_span,
342+ positive_delta: positive_deltas. to_vec( ) ,
343+ positive_count: Vec :: new( ) ,
344+ exemplars: Vec :: new( ) ,
345+ } ,
346+ ) ) ,
347+ ..Default :: default ( )
348+ } ] ,
349+ } ) ;
350+
351+ Ok ( ( ) )
352+ }
291353}
292354
293355impl < S : EncodeLabelSet , V : EncodeExemplarValue > TryFrom < & Exemplar < S , V > >
0 commit comments