commonware_runtime/telemetry/traces/mod.rs
1//! Utility functions for traces
2
3pub mod status;
4
5#[cfg(any(test, feature = "test-utils"))]
6pub mod collector;
7
8/// Records an integer as a numeric tracing field.
9///
10/// `tracing-opentelemetry` serializes `u64` and `Display`/`Debug` span fields as
11/// strings, so integers must be recorded as `i64` to stay range-queryable and
12/// correctly sorted in TraceQL. Record integer fields as `field = value.traced()`.
13pub trait TracedExt {
14 /// Returns `self` as an `i64` for use as a tracing field value.
15 fn traced(self) -> i64;
16}
17
18macro_rules! impl_traced {
19 ($($ty:ty),+ $(,)?) => {
20 $(
21 impl TracedExt for $ty {
22 fn traced(self) -> i64 {
23 i64::try_from(self).unwrap_or(i64::MAX)
24 }
25 }
26 )+
27 };
28}
29
30macro_rules! impl_traced_signed {
31 ($($ty:ty),+ $(,)?) => {
32 $(
33 impl TracedExt for $ty {
34 fn traced(self) -> i64 {
35 i64::try_from(self).unwrap_or(if self < 0 {
36 i64::MIN
37 } else {
38 i64::MAX
39 })
40 }
41 }
42 )+
43 };
44}
45
46impl_traced!(u8, u16, u32, u64, u128, usize);
47impl_traced_signed!(i8, i16, i32, i64, i128, isize);