Skip to main content

libdd_trace_utils/msgpack_decoder/decode/
metrics.rs

1// Copyright 2024-Present Datadog, Inc. https://www.datadoghq.com/
2// SPDX-License-Identifier: Apache-2.0
3
4use crate::msgpack_decoder::decode::buffer::Buffer;
5use crate::msgpack_decoder::decode::error::DecodeError;
6use crate::msgpack_decoder::decode::map::{read_map, read_map_len};
7use crate::msgpack_decoder::decode::number::read_number;
8use crate::msgpack_decoder::decode::string::handle_null_marker;
9use crate::span::DeserializableTraceData;
10use std::collections::HashMap;
11
12#[inline]
13pub fn read_metric_pair<T: DeserializableTraceData>(
14    buf: &mut Buffer<T>,
15) -> Result<(T::Text, f64), DecodeError> {
16    let key = buf.read_string()?;
17    let v = read_number(buf)?;
18
19    Ok((key, v))
20}
21#[inline]
22pub fn read_metrics<T: DeserializableTraceData>(
23    buf: &mut Buffer<T>,
24) -> Result<HashMap<T::Text, f64>, DecodeError> {
25    if handle_null_marker(buf) {
26        return Ok(HashMap::default());
27    }
28
29    let len = read_map_len(buf)?;
30
31    read_map(len, buf, read_metric_pair)
32}