@@ -5,24 +5,24 @@ use opentelemetry_sdk::export::trace::SpanData;
5
5
use opentelemetry_sdk:: Resource ;
6
6
use std:: time:: SystemTime ;
7
7
8
- pub ( crate ) fn encode < S , N , R > (
8
+ pub ( crate ) fn encode < S , N , R , W : std:: io:: Write > (
9
+ writer : & mut W ,
9
10
model_config : & ModelConfig ,
10
11
traces : Vec < & [ SpanData ] > ,
11
12
get_service_name : S ,
12
13
get_name : N ,
13
14
get_resource : R ,
14
15
resource : Option < & Resource > ,
15
- ) -> Result < Vec < u8 > , Error >
16
+ ) -> Result < ( ) , Error >
16
17
where
17
18
for < ' a > S : Fn ( & ' a SpanData , & ' a ModelConfig ) -> & ' a str ,
18
19
for < ' a > N : Fn ( & ' a SpanData , & ' a ModelConfig ) -> & ' a str ,
19
20
for < ' a > R : Fn ( & ' a SpanData , & ' a ModelConfig ) -> & ' a str ,
20
21
{
21
- let mut encoded = Vec :: new ( ) ;
22
- rmp:: encode:: write_array_len ( & mut encoded, traces. len ( ) as u32 ) ?;
22
+ rmp:: encode:: write_array_len ( writer, traces. len ( ) as u32 ) ?;
23
23
24
24
for trace in traces. into_iter ( ) {
25
- rmp:: encode:: write_array_len ( & mut encoded , trace. len ( ) as u32 ) ?;
25
+ rmp:: encode:: write_array_len ( writer , trace. len ( ) as u32 ) ?;
26
26
27
27
for span in trace {
28
28
// Safe until the year 2262 when Datadog will need to change their API
@@ -42,81 +42,78 @@ where
42
42
for kv in & span. attributes {
43
43
if kv. key . as_str ( ) == "span.type" {
44
44
span_type_found = true ;
45
- rmp:: encode:: write_map_len ( & mut encoded , 12 ) ?;
46
- rmp:: encode:: write_str ( & mut encoded , "type" ) ?;
47
- rmp:: encode:: write_str ( & mut encoded , kv. value . as_str ( ) . as_ref ( ) ) ?;
45
+ rmp:: encode:: write_map_len ( writer , 12 ) ?;
46
+ rmp:: encode:: write_str ( writer , "type" ) ?;
47
+ rmp:: encode:: write_str ( writer , kv. value . as_str ( ) . as_ref ( ) ) ?;
48
48
break ;
49
49
}
50
50
}
51
51
52
52
if !span_type_found {
53
- rmp:: encode:: write_map_len ( & mut encoded , 11 ) ?;
53
+ rmp:: encode:: write_map_len ( writer , 11 ) ?;
54
54
}
55
55
56
56
// Datadog span name is OpenTelemetry component name - see module docs for more information
57
- rmp:: encode:: write_str ( & mut encoded , "service" ) ?;
58
- rmp:: encode:: write_str ( & mut encoded , get_service_name ( span, model_config) ) ?;
57
+ rmp:: encode:: write_str ( writer , "service" ) ?;
58
+ rmp:: encode:: write_str ( writer , get_service_name ( span, model_config) ) ?;
59
59
60
- rmp:: encode:: write_str ( & mut encoded , "name" ) ?;
61
- rmp:: encode:: write_str ( & mut encoded , get_name ( span, model_config) ) ?;
60
+ rmp:: encode:: write_str ( writer , "name" ) ?;
61
+ rmp:: encode:: write_str ( writer , get_name ( span, model_config) ) ?;
62
62
63
- rmp:: encode:: write_str ( & mut encoded , "resource" ) ?;
64
- rmp:: encode:: write_str ( & mut encoded , get_resource ( span, model_config) ) ?;
63
+ rmp:: encode:: write_str ( writer , "resource" ) ?;
64
+ rmp:: encode:: write_str ( writer , get_resource ( span, model_config) ) ?;
65
65
66
- rmp:: encode:: write_str ( & mut encoded , "trace_id" ) ?;
66
+ rmp:: encode:: write_str ( writer , "trace_id" ) ?;
67
67
rmp:: encode:: write_u64 (
68
- & mut encoded ,
68
+ writer ,
69
69
u128:: from_be_bytes ( span. span_context . trace_id ( ) . to_bytes ( ) ) as u64 ,
70
70
) ?;
71
71
72
- rmp:: encode:: write_str ( & mut encoded , "span_id" ) ?;
72
+ rmp:: encode:: write_str ( writer , "span_id" ) ?;
73
73
rmp:: encode:: write_u64 (
74
- & mut encoded ,
74
+ writer ,
75
75
u64:: from_be_bytes ( span. span_context . span_id ( ) . to_bytes ( ) ) ,
76
76
) ?;
77
77
78
- rmp:: encode:: write_str ( & mut encoded, "parent_id" ) ?;
79
- rmp:: encode:: write_u64 (
80
- & mut encoded,
81
- u64:: from_be_bytes ( span. parent_span_id . to_bytes ( ) ) ,
82
- ) ?;
78
+ rmp:: encode:: write_str ( writer, "parent_id" ) ?;
79
+ rmp:: encode:: write_u64 ( writer, u64:: from_be_bytes ( span. parent_span_id . to_bytes ( ) ) ) ?;
83
80
84
- rmp:: encode:: write_str ( & mut encoded , "start" ) ?;
85
- rmp:: encode:: write_i64 ( & mut encoded , start) ?;
81
+ rmp:: encode:: write_str ( writer , "start" ) ?;
82
+ rmp:: encode:: write_i64 ( writer , start) ?;
86
83
87
- rmp:: encode:: write_str ( & mut encoded , "duration" ) ?;
88
- rmp:: encode:: write_i64 ( & mut encoded , duration) ?;
84
+ rmp:: encode:: write_str ( writer , "duration" ) ?;
85
+ rmp:: encode:: write_i64 ( writer , duration) ?;
89
86
90
- rmp:: encode:: write_str ( & mut encoded , "error" ) ?;
87
+ rmp:: encode:: write_str ( writer , "error" ) ?;
91
88
rmp:: encode:: write_i32 (
92
- & mut encoded ,
89
+ writer ,
93
90
match span. status {
94
91
Status :: Error { .. } => 1 ,
95
92
_ => 0 ,
96
93
} ,
97
94
) ?;
98
95
99
- rmp:: encode:: write_str ( & mut encoded , "meta" ) ?;
96
+ rmp:: encode:: write_str ( writer , "meta" ) ?;
100
97
rmp:: encode:: write_map_len (
101
- & mut encoded ,
98
+ writer ,
102
99
( span. attributes . len ( ) + resource. map ( |r| r. len ( ) ) . unwrap_or ( 0 ) ) as u32 ,
103
100
) ?;
104
101
if let Some ( resource) = resource {
105
102
for ( key, value) in resource. iter ( ) {
106
- rmp:: encode:: write_str ( & mut encoded , key. as_str ( ) ) ?;
107
- rmp:: encode:: write_str ( & mut encoded , value. as_str ( ) . as_ref ( ) ) ?;
103
+ rmp:: encode:: write_str ( writer , key. as_str ( ) ) ?;
104
+ rmp:: encode:: write_str ( writer , value. as_str ( ) . as_ref ( ) ) ?;
108
105
}
109
106
}
110
107
for kv in span. attributes . iter ( ) {
111
- rmp:: encode:: write_str ( & mut encoded , kv. key . as_str ( ) ) ?;
112
- rmp:: encode:: write_str ( & mut encoded , kv. value . as_str ( ) . as_ref ( ) ) ?;
108
+ rmp:: encode:: write_str ( writer , kv. key . as_str ( ) ) ?;
109
+ rmp:: encode:: write_str ( writer , kv. value . as_str ( ) . as_ref ( ) ) ?;
113
110
}
114
111
115
- rmp:: encode:: write_str ( & mut encoded , "metrics" ) ?;
116
- rmp:: encode:: write_map_len ( & mut encoded , 1 ) ?;
117
- rmp:: encode:: write_str ( & mut encoded , SAMPLING_PRIORITY_KEY ) ?;
112
+ rmp:: encode:: write_str ( writer , "metrics" ) ?;
113
+ rmp:: encode:: write_map_len ( writer , 1 ) ?;
114
+ rmp:: encode:: write_str ( writer , SAMPLING_PRIORITY_KEY ) ?;
118
115
rmp:: encode:: write_f64 (
119
- & mut encoded ,
116
+ writer ,
120
117
if span. span_context . is_sampled ( ) {
121
118
1.0
122
119
} else {
@@ -126,5 +123,5 @@ where
126
123
}
127
124
}
128
125
129
- Ok ( encoded )
126
+ Ok ( ( ) )
130
127
}
0 commit comments