Skip to content

Commit ee9b931

Browse files
committed
refactor: use vecspan helper instead of manual iter ops
1 parent 7444a40 commit ee9b931

5 files changed

Lines changed: 39 additions & 145 deletions

File tree

libdd-trace-utils/src/msgpack_decoder/v04/mod.rs

Lines changed: 3 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -529,30 +529,12 @@ mod tests {
529529
let key1 = BytesString::from_slice("key1".as_ref()).unwrap();
530530
let key2 = BytesString::from_slice("key2".as_ref()).unwrap();
531531
let key3 = BytesString::from_slice("key3".as_ref()).unwrap();
532-
assert_eq!(
533-
"value1",
534-
decoded_span
535-
.meta
536-
.iter()
537-
.find(|(k, _)| *k == key1)
538-
.unwrap()
539-
.1
540-
.as_str()
541-
);
532+
assert_eq!("value1", decoded_span.meta.get(&key1).unwrap().as_str());
542533
assert!(
543-
!decoded_span.meta.iter().any(|(k, _)| *k == key2),
534+
!decoded_span.meta.contains_key(&key2),
544535
"Null value should be skipped, but key was present"
545536
);
546-
assert_eq!(
547-
"value3",
548-
decoded_span
549-
.meta
550-
.iter()
551-
.find(|(k, _)| *k == key3)
552-
.unwrap()
553-
.1
554-
.as_str()
555-
);
537+
assert_eq!("value3", decoded_span.meta.get(&key3).unwrap().as_str());
556538
}
557539

558540
#[test]

libdd-trace-utils/src/msgpack_decoder/v05/mod.rs

Lines changed: 4 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -388,41 +388,13 @@ mod tests {
388388
assert_eq!(span.error, 1);
389389
assert_eq!(span.meta.len(), 3);
390390
assert_eq!(
391-
span.meta
392-
.iter()
393-
.find(|(k, _)| k.as_str() == "_dd.sampling_rate_whatever")
394-
.unwrap()
395-
.1
396-
.as_str(),
391+
span.meta.get("_dd.sampling_rate_whatever").unwrap().as_str(),
397392
"value whatever"
398393
);
399-
assert_eq!(
400-
span.meta
401-
.iter()
402-
.find(|(k, _)| k.as_str() == "")
403-
.unwrap()
404-
.1
405-
.as_str(),
406-
"item"
407-
);
408-
assert_eq!(
409-
span.meta
410-
.iter()
411-
.find(|(k, _)| k.as_str() == "version")
412-
.unwrap()
413-
.1
414-
.as_str(),
415-
"7.0"
416-
);
394+
assert_eq!(span.meta.get("").unwrap().as_str(), "item");
395+
assert_eq!(span.meta.get("version").unwrap().as_str(), "7.0");
417396
assert_eq!(span.metrics.len(), 1);
418-
assert_eq!(
419-
span.metrics
420-
.iter()
421-
.find(|(k, _)| k.as_str() == "X")
422-
.unwrap()
423-
.1,
424-
1.2_f64
425-
);
397+
assert_eq!(*span.metrics.get("X").unwrap(), 1.2_f64);
426398
assert_eq!(span.r#type.as_str(), "sql");
427399
}
428400

libdd-trace-utils/src/msgpack_encoder/v1/mod.rs

Lines changed: 17 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -110,39 +110,22 @@ where
110110
'outer: for trace in traces {
111111
for span in trace.as_ref() {
112112
if env.is_none() {
113-
env = span
114-
.meta
115-
.iter()
116-
.find(|(k, _)| k.borrow() == "env")
117-
.map(|(_, v)| v.borrow());
113+
env = span.meta.get("env").map(|v| v.borrow());
118114
}
119115
if hostname.is_none() {
120-
hostname = span
121-
.meta
122-
.iter()
123-
.find(|(k, _)| k.borrow() == "_dd.hostname")
124-
.map(|(_, v)| v.borrow());
116+
hostname = span.meta.get("_dd.hostname").map(|v| v.borrow());
125117
}
126118
if app_version.is_none() {
127-
app_version = span
128-
.meta
129-
.iter()
130-
.find(|(k, _)| k.borrow() == "version")
131-
.map(|(_, v)| v.borrow());
119+
app_version = span.meta.get("version").map(|v| v.borrow());
132120
}
133121
if apm_mode.is_none() {
134-
apm_mode = span
135-
.meta
136-
.iter()
137-
.find(|(k, _)| k.borrow() == "_dd.apm_mode")
138-
.map(|(_, v)| v.borrow());
122+
apm_mode = span.meta.get("_dd.apm_mode").map(|v| v.borrow());
139123
}
140124
if git_commit_sha.is_none() {
141125
git_commit_sha = span
142126
.meta
143-
.iter()
144-
.find(|(k, _)| k.borrow() == "_dd.git.commit.sha")
145-
.map(|(_, v)| v.borrow());
127+
.get("_dd.git.commit.sha")
128+
.map(|v| v.borrow());
146129
}
147130
if env.is_some()
148131
&& hostname.is_some()
@@ -187,9 +170,8 @@ where
187170
.map(|s| {
188171
let high = s
189172
.meta
190-
.iter()
191-
.find(|(k, _)| k.borrow() == "_dd.p.tid")
192-
.and_then(|(_, v)| u64::from_str_radix(v.borrow(), 16).ok())
173+
.get("_dd.p.tid")
174+
.and_then(|v| u64::from_str_radix(v.borrow(), 16).ok())
193175
.unwrap_or(0);
194176
((high as u128) << 64) | s.trace_id
195177
})
@@ -202,60 +184,36 @@ where
202184
for span in spans {
203185
// Root span: either no parent in this chunk, or tagged _dd.top_level=1 (remote parent).
204186
let is_root = span.parent_id == 0
205-
|| span
206-
.metrics
207-
.iter()
208-
.find(|(k, _)| k.borrow() == "_dd.top_level")
209-
.map(|(_, v)| *v)
210-
.unwrap_or(0.0)
211-
== 1.0;
187+
|| span.metrics.get("_dd.top_level").copied().unwrap_or(0.0) == 1.0;
212188

213189
if is_root {
214190
// Root span is authoritative: its values supersede any non-root fallback,
215191
// including absence (a field missing on the root should not be filled from non-roots).
216-
sampling_priority = span
217-
.metrics
218-
.iter()
219-
.find(|(k, _)| k.borrow() == "_sampling_priority_v1")
220-
.map(|(_, v)| *v as i32);
221-
origin = span
222-
.meta
223-
.iter()
224-
.find(|(k, _)| k.borrow() == "_dd.origin")
225-
.map(|(_, v)| v.borrow());
192+
sampling_priority = span.metrics.get("_sampling_priority_v1").map(|v| *v as i32);
193+
origin = span.meta.get("_dd.origin").map(|v| v.borrow());
226194
// _dd.p.dm is a signed integer stored as a string; unsigned_abs preserves the
227195
// magnitude.
228196
sampling_mechanism = span
229197
.meta
230-
.iter()
231-
.find(|(k, _)| k.borrow() == "_dd.p.dm")
232-
.and_then(|(_, v)| v.borrow().parse::<i32>().ok())
198+
.get("_dd.p.dm")
199+
.and_then(|v| v.borrow().parse::<i32>().ok())
233200
.map(|dm| dm.unsigned_abs());
234201
break;
235202
}
236203

237204
// No root found yet — accumulate fallback values from non-root spans (partial flush).
238205
// Root span values will override these if a root is eventually encountered.
239206
if sampling_priority.is_none() {
240-
sampling_priority = span
241-
.metrics
242-
.iter()
243-
.find(|(k, _)| k.borrow() == "_sampling_priority_v1")
244-
.map(|(_, v)| *v as i32);
207+
sampling_priority = span.metrics.get("_sampling_priority_v1").map(|v| *v as i32);
245208
}
246209
if origin.is_none() {
247-
origin = span
248-
.meta
249-
.iter()
250-
.find(|(k, _)| k.borrow() == "_dd.origin")
251-
.map(|(_, v)| v.borrow());
210+
origin = span.meta.get("_dd.origin").map(|v| v.borrow());
252211
}
253212
if sampling_mechanism.is_none() {
254213
sampling_mechanism = span
255214
.meta
256-
.iter()
257-
.find(|(k, _)| k.borrow() == "_dd.p.dm")
258-
.and_then(|(_, v)| v.borrow().parse::<i32>().ok())
215+
.get("_dd.p.dm")
216+
.and_then(|v| v.borrow().parse::<i32>().ok())
259217
.map(|dm| dm.unsigned_abs());
260218
}
261219
}

libdd-trace-utils/src/msgpack_encoder/v1/span_v04.rs

Lines changed: 5 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -259,27 +259,14 @@ pub fn encode_span<W: RmpWrite, T: TraceData>(
259259
let attr_count = non_promoted_meta + span.metrics.len() as u32 + span.meta_struct.len() as u32;
260260
let has_attributes = attr_count > 0;
261261

262-
let env = span
263-
.meta
264-
.iter()
265-
.find(|(k, _)| k.borrow() == "env")
266-
.map(|(_, v)| v.borrow());
267-
let version = span
268-
.meta
269-
.iter()
270-
.find(|(k, _)| k.borrow() == "version")
271-
.map(|(_, v)| v.borrow());
272-
let component = span
273-
.meta
274-
.iter()
275-
.find(|(k, _)| k.borrow() == "component")
276-
.map(|(_, v)| v.borrow());
262+
let env = span.meta.get("env").map(|v| v.borrow());
263+
let version = span.meta.get("version").map(|v| v.borrow());
264+
let component = span.meta.get("component").map(|v| v.borrow());
277265
// span.kind is always emitted — defaults to Internal per OTEL spec.
278266
let kind = span_kind_from_str(
279267
span.meta
280-
.iter()
281-
.find(|(k, _)| k.borrow() == "span.kind")
282-
.map(|(_, v)| v.borrow())
268+
.get("span.kind")
269+
.map(|v| v.borrow())
283270
.unwrap_or(""),
284271
);
285272

libdd-trace-utils/src/otlp_encoder/mapper.rs

Lines changed: 10 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -98,9 +98,8 @@ fn map_span<T: TraceData>(span: &Span<T>, resource_service: &str) -> OtlpSpan {
9898
// the hex string meta tag "_dd.p.tid".
9999
let trace_id_high: u128 = span
100100
.meta
101-
.iter()
102-
.find(|(k, _)| k.borrow() == "_dd.p.tid")
103-
.and_then(|(_, v)| u64::from_str_radix(v.borrow(), 16).ok())
101+
.get("_dd.p.tid")
102+
.and_then(|v| u64::from_str_radix(v.borrow(), 16).ok())
104103
.unwrap_or(0) as u128;
105104
let trace_id_128 = (trace_id_high << 64) | span.trace_id;
106105
let trace_id_hex = format!("{:032x}", trace_id_128);
@@ -118,16 +117,14 @@ fn map_span<T: TraceData>(span: &Span<T>, resource_service: &str) -> OtlpSpan {
118117
// the Datadog span type field for DD-instrumented spans.
119118
let kind = span
120119
.meta
121-
.iter()
122-
.find(|(k, _)| k.borrow() == "span.kind")
123-
.map(|(_, v)| tag_to_otlp_kind(v.borrow()))
120+
.get("span.kind")
121+
.map(|v| tag_to_otlp_kind(v.borrow()))
124122
.unwrap_or_else(|| dd_type_to_otlp_kind(span.r#type.borrow()));
125123
let (attributes, dropped_attributes_count) = map_attributes(span, resource_service);
126124
let error_msg = span
127125
.meta
128-
.iter()
129-
.find(|(k, _)| k.borrow() == "error.msg")
130-
.map(|(_, v)| v.borrow().to_string());
126+
.get("error.msg")
127+
.map(|v| v.borrow().to_string());
131128
let status = if span.error != 0 {
132129
Status {
133130
message: error_msg,
@@ -142,14 +139,12 @@ fn map_span<T: TraceData>(span: &Span<T>, resource_service: &str) -> OtlpSpan {
142139
// Set flags from sampling priority: 1 = sampled/keep, 0 = dropped.
143140
let flags = span
144141
.metrics
145-
.iter()
146-
.find(|(k, _)| k.borrow() == "_sampling_priority_v1")
147-
.map(|(_, p)| if *p >= 1.0 { 1u32 } else { 0u32 });
142+
.get("_sampling_priority_v1")
143+
.map(|p| if *p >= 1.0 { 1u32 } else { 0u32 });
148144
let trace_state = span
149145
.meta
150-
.iter()
151-
.find(|(k, _)| k.borrow() == "tracestate")
152-
.map(|(_, v)| v.borrow().to_string())
146+
.get("tracestate")
147+
.map(|v| v.borrow().to_string())
153148
.filter(|s| !s.is_empty());
154149
let links = span.span_links.iter().map(map_span_link).collect();
155150
let (events, dropped_events_count) = map_span_events(&span.span_events);

0 commit comments

Comments
 (0)