@@ -25,29 +25,34 @@ where
25
25
B :: Data : Send + Into < Bytes > ,
26
26
B :: Error : Into < axum:: BoxError > ,
27
27
{
28
- let trace = if content_type. as_ref ( ) . starts_with ( "application/json" ) {
28
+ let mut trace = None ;
29
+ if content_type. as_ref ( ) . starts_with ( "application/json" ) {
29
30
let json: Json < TracesData > = request. extract ( ) . await ?;
30
- json. 0
31
- } else {
31
+ trace = Some ( json. 0 )
32
+ } else if content_type . as_ref ( ) . starts_with ( "application/x-protobuf" ) {
32
33
let protobuf: Protobuf < TracesData > = request. extract ( ) . await ?;
33
- protobuf. 0
34
- } ;
34
+ trace = Some ( protobuf. 0 )
35
+ }
35
36
36
- let mut envelope = Envelope :: from_request ( None , meta) ;
37
- for resource_span in trace. resource_spans {
38
- for scope_span in resource_span. scope_spans {
39
- for span in scope_span. spans {
40
- let Ok ( payload) = serde_json:: to_vec ( & span) else {
41
- continue ;
42
- } ;
43
- let mut item = Item :: new ( ItemType :: OtelSpan ) ;
44
- item. set_payload ( ContentType :: Json , payload) ;
45
- envelope. add_item ( item) ;
37
+ if let Some ( trace) = trace {
38
+ let mut envelope = Envelope :: from_request ( None , meta) ;
39
+ for resource_span in trace. resource_spans {
40
+ for scope_span in resource_span. scope_spans {
41
+ for span in scope_span. spans {
42
+ let Ok ( payload) = serde_json:: to_vec ( & span) else {
43
+ continue ;
44
+ } ;
45
+ let mut item = Item :: new ( ItemType :: OtelSpan ) ;
46
+ item. set_payload ( ContentType :: Json , payload) ;
47
+ envelope. add_item ( item) ;
48
+ }
46
49
}
47
50
}
51
+ common:: handle_envelope ( & state, envelope) . await ?;
52
+ Ok ( StatusCode :: ACCEPTED )
53
+ } else {
54
+ Ok ( StatusCode :: UNSUPPORTED_MEDIA_TYPE )
48
55
}
49
- common:: handle_envelope ( & state, envelope) . await ?;
50
- Ok ( StatusCode :: ACCEPTED )
51
56
}
52
57
53
58
pub fn route < B > ( config : & Config ) -> MethodRouter < ServiceState , B >
0 commit comments