@@ -16,6 +16,7 @@ use libdd_trace_utils::msgpack_decoder::decode::error::DecodeError;
1616use libdd_trace_utils:: msgpack_encoder;
1717use libdd_trace_utils:: span:: { v04:: Span , TraceData } ;
1818use libdd_trace_utils:: trace_utils:: { self , TracerHeaderTags } ;
19+ use libdd_trace_utils:: tracer_metadata:: TracerMetadata ;
1920use libdd_trace_utils:: tracer_payload;
2021
2122/// Minimal capacity of fresh buffers allocated to encode traces, in bytes.
@@ -52,13 +53,14 @@ impl TraceSerializer {
5253 & self ,
5354 traces : Vec < Vec < Span < T > > > ,
5455 header_tags : TracerHeaderTags ,
56+ metadata : & TracerMetadata ,
5557 agent_payload_response_version : Option < & AgentResponsePayloadVersion > ,
5658 ) -> Result < PreparedTracesPayload , TraceExporterError > {
5759 let payload = self . collect_and_process_traces ( traces) ?;
5860 let chunks = payload. size ( ) ;
5961 let headers =
6062 self . build_traces_headers ( header_tags, chunks, agent_payload_response_version) ;
61- let mp_payload = self . serialize_payload ( & payload) ?;
63+ let mp_payload = self . serialize_payload ( & payload, metadata ) ?;
6264
6365 Ok ( PreparedTracesPayload {
6466 data : mp_payload,
@@ -72,13 +74,15 @@ impl TraceSerializer {
7274 & self ,
7375 traces : Vec < Vec < Span < T > > > ,
7476 ) -> Result < tracer_payload:: TraceChunks < T > , TraceExporterError > {
75- let use_v05_format = match self . output_format {
76- TraceExporterOutputFormat :: V05 => true ,
77- TraceExporterOutputFormat :: V04 => false ,
78- } ;
79- trace_utils:: collect_trace_chunks ( traces, use_v05_format) . map_err ( |e| {
80- TraceExporterError :: Deserialization ( DecodeError :: InvalidFormat ( e. to_string ( ) ) )
81- } )
77+ match self . output_format {
78+ TraceExporterOutputFormat :: V1 => Ok ( tracer_payload:: TraceChunks :: V1 ( traces) ) ,
79+ format => {
80+ let use_v05_format = matches ! ( format, TraceExporterOutputFormat :: V05 ) ;
81+ trace_utils:: collect_trace_chunks ( traces, use_v05_format) . map_err ( |e| {
82+ TraceExporterError :: Deserialization ( DecodeError :: InvalidFormat ( e. to_string ( ) ) )
83+ } )
84+ }
85+ }
8286 }
8387
8488 /// Build HTTP headers for traces request
@@ -105,6 +109,7 @@ impl TraceSerializer {
105109 fn serialize_payload < T : TraceData > (
106110 & self ,
107111 payload : & tracer_payload:: TraceChunks < T > ,
112+ metadata : & TracerMetadata ,
108113 ) -> Result < Vec < u8 > , TraceExporterError > {
109114 let capacity = self
110115 . previous_serialised_len
@@ -120,6 +125,9 @@ impl TraceSerializer {
120125 . map_err ( TraceExporterError :: Serialization ) ?;
121126 buff
122127 }
128+ tracer_payload:: TraceChunks :: V1 ( p) => {
129+ msgpack_encoder:: v1:: to_vec_with_capacity ( p, capacity as u32 , metadata)
130+ }
123131 } ;
124132 self . previous_serialised_len
125133 . store ( buff. len ( ) , Ordering :: Relaxed ) ;
@@ -275,7 +283,7 @@ mod tests {
275283 . collect_and_process_traces ( original_traces. clone ( ) )
276284 . unwrap ( ) ;
277285
278- let result = serializer. serialize_payload ( & payload) ;
286+ let result = serializer. serialize_payload ( & payload, & TracerMetadata :: default ( ) ) ;
279287 assert ! ( result. is_ok( ) ) ;
280288
281289 let serialized = result. unwrap ( ) ;
@@ -310,7 +318,7 @@ mod tests {
310318 . collect_and_process_traces ( original_traces. clone ( ) )
311319 . unwrap ( ) ;
312320
313- let result = serializer. serialize_payload ( & payload) ;
321+ let result = serializer. serialize_payload ( & payload, & TracerMetadata :: default ( ) ) ;
314322 assert ! ( result. is_ok( ) ) ;
315323
316324 let serialized = result. unwrap ( ) ;
@@ -346,7 +354,12 @@ mod tests {
346354 ] ;
347355 let header_tags = create_test_header_tags ( ) ;
348356
349- let result = serializer. prepare_traces_payload ( traces, header_tags, None ) ;
357+ let result = serializer. prepare_traces_payload (
358+ traces,
359+ header_tags,
360+ & TracerMetadata :: default ( ) ,
361+ None ,
362+ ) ;
350363 assert ! ( result. is_ok( ) ) ;
351364
352365 let prepared = result. unwrap ( ) ;
@@ -365,7 +378,12 @@ mod tests {
365378 let traces = vec ! [ vec![ create_test_span( ) ] ] ;
366379 let header_tags = create_test_header_tags ( ) ;
367380
368- let result = serializer. prepare_traces_payload ( traces, header_tags, None ) ;
381+ let result = serializer. prepare_traces_payload (
382+ traces,
383+ header_tags,
384+ & TracerMetadata :: default ( ) ,
385+ None ,
386+ ) ;
369387 assert ! ( result. is_ok( ) ) ;
370388
371389 let prepared = result. unwrap ( ) ;
@@ -381,7 +399,12 @@ mod tests {
381399 let traces = vec ! [ vec![ create_test_span( ) ] ] ;
382400 let header_tags = create_test_header_tags ( ) ;
383401
384- let result = serializer. prepare_traces_payload ( traces, header_tags, Some ( & agent_version) ) ;
402+ let result = serializer. prepare_traces_payload (
403+ traces,
404+ header_tags,
405+ & TracerMetadata :: default ( ) ,
406+ Some ( & agent_version) ,
407+ ) ;
385408 assert ! ( result. is_ok( ) ) ;
386409
387410 let prepared = result. unwrap ( ) ;
@@ -395,7 +418,12 @@ mod tests {
395418 let traces: Vec < Vec < SpanBytes > > = vec ! [ ] ;
396419 let header_tags = create_test_header_tags ( ) ;
397420
398- let result = serializer. prepare_traces_payload ( traces, header_tags, None ) ;
421+ let result = serializer. prepare_traces_payload (
422+ traces,
423+ header_tags,
424+ & TracerMetadata :: default ( ) ,
425+ None ,
426+ ) ;
399427 assert ! ( result. is_ok( ) ) ;
400428
401429 let prepared = result. unwrap ( ) ;
0 commit comments