Skip to content

Commit a1c3d48

Browse files
committed
feat: rework span links vector reading
1 parent ffe2169 commit a1c3d48

File tree

2 files changed

+23
-15
lines changed

2 files changed

+23
-15
lines changed

trace-utils/src/msgpack_decoder/decode/span_link.rs

+8-14
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ use crate::msgpack_decoder::decode::string::{
77
handle_null_marker, read_str_map_to_bytes_strings, read_string_bytes, read_string_ref,
88
};
99
use crate::span::SpanLinkBytes;
10-
use rmp::Marker;
1110
use std::str::FromStr;
1211
use tinybytes::Bytes;
1312

@@ -33,20 +32,15 @@ pub(crate) fn read_span_links(buf: &mut Bytes) -> Result<Vec<SpanLinkBytes>, Dec
3332
return Ok(empty_vec);
3433
}
3534

36-
match rmp::decode::read_marker(unsafe { buf.as_mut_slice() }).map_err(|_| {
37-
DecodeError::InvalidFormat("Unable to read marker for span links".to_owned())
38-
})? {
39-
Marker::FixArray(len) => {
40-
let mut vec: Vec<SpanLinkBytes> = Vec::with_capacity(len.into());
41-
for _ in 0..len {
42-
vec.push(decode_span_link(buf)?);
43-
}
44-
Ok(vec)
45-
}
46-
_ => Err(DecodeError::InvalidType(
47-
"Unable to read span link from buffer".to_owned(),
48-
)),
35+
let len = rmp::decode::read_array_len(unsafe { buf.as_mut_slice() }).map_err(|_| {
36+
DecodeError::InvalidType("Unable to get array len for span links".to_owned())
37+
})?;
38+
39+
let mut vec: Vec<SpanLinkBytes> = Vec::with_capacity(len.try_into().unwrap());
40+
for _ in 0..len {
41+
vec.push(decode_span_link(buf)?);
4942
}
43+
Ok(vec)
5044
}
5145
#[derive(Debug, PartialEq)]
5246
enum SpanLinkKey {

trace-utils/src/span/mod.rs

+15-1
Original file line numberDiff line numberDiff line change
@@ -259,7 +259,7 @@ fn is_default<T: Default + PartialEq>(t: &T) -> bool {
259259

260260
#[cfg(test)]
261261
mod tests {
262-
use super::{AttributeAnyValue, AttributeArrayValue, Span, SpanEvent};
262+
use super::{AttributeAnyValue, AttributeArrayValue, Span, SpanEvent, SpanLink};
263263
use crate::msgpack_decoder::v04::span::decode_span;
264264
use std::collections::HashMap;
265265

@@ -276,6 +276,12 @@ mod tests {
276276
let span: Span<&str> = Span {
277277
name: "tracing.operation",
278278
resource: "MyEndpoint",
279+
span_links: vec![SpanLink {
280+
trace_id: 42,
281+
attributes: HashMap::from([("span", "link")]),
282+
tracestate: "running",
283+
..Default::default()
284+
}],
279285
span_events: vec![SpanEvent {
280286
time_unix_nano: 1727211691770716000,
281287
name: "exception",
@@ -317,6 +323,14 @@ mod tests {
317323

318324
assert_eq!(span.name, deserialized.name.as_str());
319325
assert_eq!(span.resource, deserialized.resource.as_str());
326+
assert_eq!(
327+
span.span_links[0].trace_id,
328+
deserialized.span_links[0].trace_id
329+
);
330+
assert_eq!(
331+
span.span_links[0].tracestate,
332+
deserialized.span_links[0].tracestate.as_str()
333+
);
320334
assert_eq!(
321335
span.span_events[0].name,
322336
deserialized.span_events[0].name.as_str()

0 commit comments

Comments
 (0)