libdd-trace-utils 12.0.0

Trace utilities including span processing, MessagePack encoding/decoding, payload handling, and HTTP transport with retry logic for Datadog APM
Documentation
// Copyright 2024-Present Datadog, Inc. https://www.datadoghq.com/
// SPDX-License-Identifier: Apache-2.0

use crate::msgpack_decoder::decode::buffer::Buffer;
use crate::msgpack_decoder::decode::error::DecodeError;
use crate::msgpack_decoder::decode::map::{read_map_len, read_map_vec};
use crate::msgpack_decoder::decode::number::read_number;
use crate::msgpack_decoder::decode::string::handle_null_marker;
use crate::span::vec_map::VecMap;
use crate::span::DeserializableTraceData;

#[inline]
pub fn read_metric_pair<T: DeserializableTraceData>(
    buf: &mut Buffer<T>,
) -> Result<(T::Text, f64), DecodeError> {
    let key = buf.read_string()?;
    let v = read_number(buf)?;

    Ok((key, v))
}
#[inline]
pub fn read_metrics<T: DeserializableTraceData>(
    buf: &mut Buffer<T>,
) -> Result<VecMap<T::Text, f64>, DecodeError> {
    if handle_null_marker(buf) {
        return Ok(VecMap::new());
    }

    let len = read_map_len(buf)?;

    read_map_vec(len, buf, read_metric_pair)
}