@@ -5,24 +5,24 @@ use opentelemetry_sdk::export::trace::SpanData;
55use opentelemetry_sdk:: Resource ;
66use std:: time:: SystemTime ;
77
8- pub ( crate ) fn encode < S , N , R > (
8+ pub ( crate ) fn encode < S , N , R , W : std:: io:: Write > (
9+ writer : & mut W ,
910 model_config : & ModelConfig ,
1011 traces : Vec < & [ SpanData ] > ,
1112 get_service_name : S ,
1213 get_name : N ,
1314 get_resource : R ,
1415 resource : Option < & Resource > ,
15- ) -> Result < Vec < u8 > , Error >
16+ ) -> Result < ( ) , Error >
1617where
1718 for < ' a > S : Fn ( & ' a SpanData , & ' a ModelConfig ) -> & ' a str ,
1819 for < ' a > N : Fn ( & ' a SpanData , & ' a ModelConfig ) -> & ' a str ,
1920 for < ' a > R : Fn ( & ' a SpanData , & ' a ModelConfig ) -> & ' a str ,
2021{
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 ) ?;
2323
2424 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 ) ?;
2626
2727 for span in trace {
2828 // Safe until the year 2262 when Datadog will need to change their API
@@ -42,81 +42,78 @@ where
4242 for kv in & span. attributes {
4343 if kv. key . as_str ( ) == "span.type" {
4444 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 ( ) ) ?;
4848 break ;
4949 }
5050 }
5151
5252 if !span_type_found {
53- rmp:: encode:: write_map_len ( & mut encoded , 11 ) ?;
53+ rmp:: encode:: write_map_len ( writer , 11 ) ?;
5454 }
5555
5656 // 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) ) ?;
5959
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) ) ?;
6262
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) ) ?;
6565
66- rmp:: encode:: write_str ( & mut encoded , "trace_id" ) ?;
66+ rmp:: encode:: write_str ( writer , "trace_id" ) ?;
6767 rmp:: encode:: write_u64 (
68- & mut encoded ,
68+ writer ,
6969 u128:: from_be_bytes ( span. span_context . trace_id ( ) . to_bytes ( ) ) as u64 ,
7070 ) ?;
7171
72- rmp:: encode:: write_str ( & mut encoded , "span_id" ) ?;
72+ rmp:: encode:: write_str ( writer , "span_id" ) ?;
7373 rmp:: encode:: write_u64 (
74- & mut encoded ,
74+ writer ,
7575 u64:: from_be_bytes ( span. span_context . span_id ( ) . to_bytes ( ) ) ,
7676 ) ?;
7777
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 ( ) ) ) ?;
8380
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) ?;
8683
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) ?;
8986
90- rmp:: encode:: write_str ( & mut encoded , "error" ) ?;
87+ rmp:: encode:: write_str ( writer , "error" ) ?;
9188 rmp:: encode:: write_i32 (
92- & mut encoded ,
89+ writer ,
9390 match span. status {
9491 Status :: Error { .. } => 1 ,
9592 _ => 0 ,
9693 } ,
9794 ) ?;
9895
99- rmp:: encode:: write_str ( & mut encoded , "meta" ) ?;
96+ rmp:: encode:: write_str ( writer , "meta" ) ?;
10097 rmp:: encode:: write_map_len (
101- & mut encoded ,
98+ writer ,
10299 ( span. attributes . len ( ) + resource. map ( |r| r. len ( ) ) . unwrap_or ( 0 ) ) as u32 ,
103100 ) ?;
104101 if let Some ( resource) = resource {
105102 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 ( ) ) ?;
108105 }
109106 }
110107 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 ( ) ) ?;
113110 }
114111
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 ) ?;
118115 rmp:: encode:: write_f64 (
119- & mut encoded ,
116+ writer ,
120117 if span. span_context . is_sampled ( ) {
121118 1.0
122119 } else {
@@ -126,5 +123,5 @@ where
126123 }
127124 }
128125
129- Ok ( encoded )
126+ Ok ( ( ) )
130127}
0 commit comments