@@ -10,14 +10,10 @@ import (
1010 "go.opentelemetry.io/otel/trace"
1111
1212 "go.opentelemetry.io/collector/client"
13- pdataint "go.opentelemetry.io/collector/pdata/internal"
14- protocommon "go.opentelemetry.io/collector/pdata/internal/data/protogen/common/v1"
15- "go.opentelemetry.io/collector/pdata/pcommon"
13+ otlpcommon "go.opentelemetry.io/collector/pdata/internal/data/protogen/common/v1"
1614 "go.opentelemetry.io/collector/pdata/xpdata/request/internal"
1715)
1816
19- var readOnlyState = pdataint .StateReadOnly
20-
2117// encodeContext encodes the context into a map of strings.
2218func encodeContext (ctx context.Context ) internal.RequestContext {
2319 rc := internal.RequestContext {}
@@ -45,19 +41,25 @@ func encodeSpanContext(ctx context.Context, rc *internal.RequestContext) {
4541
4642func encodeClientMetadata (ctx context.Context , rc * internal.RequestContext ) {
4743 clientMetadata := client .FromContext (ctx ).Metadata
48- metadataMap , metadataFound := pcommon.Map {}, false
4944 for k := range clientMetadata .Keys () {
50- if ! metadataFound {
51- metadataMap , metadataFound = pcommon .NewMap (), true
52- }
53- vals := metadataMap .PutEmptySlice (k )
54- for i := 0 ; i < len (clientMetadata .Get (k )); i ++ {
55- vals .AppendEmpty ().SetStr (clientMetadata .Get (k )[i ])
45+ vals := clientMetadata .Get (k )
46+ switch len (vals ) {
47+ case 1 :
48+ rc .ClientMetadata = append (rc .ClientMetadata , otlpcommon.KeyValue {
49+ Key : k ,
50+ Value : otlpcommon.AnyValue {Value : & otlpcommon.AnyValue_StringValue {StringValue : vals [0 ]}},
51+ })
52+ default :
53+ metadataArray := make ([]otlpcommon.AnyValue , 0 , len (vals ))
54+ for i := 0 ; i < len (vals ); i ++ {
55+ metadataArray = append (metadataArray , otlpcommon.AnyValue {Value : & otlpcommon.AnyValue_StringValue {StringValue : vals [i ]}})
56+ }
57+ rc .ClientMetadata = append (rc .ClientMetadata , otlpcommon.KeyValue {
58+ Key : k ,
59+ Value : otlpcommon.AnyValue {Value : & otlpcommon.AnyValue_ArrayValue {ArrayValue : & otlpcommon.ArrayValue {Values : metadataArray }}},
60+ })
5661 }
5762 }
58- if metadataFound {
59- rc .ClientMetadata = * pdataint .GetOrigMap (pdataint .Map (metadataMap ))
60- }
6163}
6264
6365func encodeClientAddress (ctx context.Context , rc * internal.RequestContext ) {
@@ -122,15 +124,21 @@ func decodeSpanContext(ctx context.Context, sc *internal.SpanContext) context.Co
122124 }))
123125}
124126
125- func decodeClientMetadata (clientMetadata []protocommon .KeyValue ) map [string ][]string {
127+ func decodeClientMetadata (clientMetadata []otlpcommon .KeyValue ) map [string ][]string {
126128 if len (clientMetadata ) == 0 {
127129 return nil
128130 }
129131 metadataMap := make (map [string ][]string , len (clientMetadata ))
130- for k , vals := range pcommon .Map (pdataint .NewMap (& clientMetadata , & readOnlyState )).All () {
131- metadataMap [k ] = make ([]string , vals .Slice ().Len ())
132- for i , v := range vals .Slice ().All () {
133- metadataMap [k ][i ] = v .Str ()
132+ for _ , kv := range clientMetadata {
133+ switch val := kv .Value .Value .(type ) {
134+ case * otlpcommon.AnyValue_StringValue :
135+ metadataMap [kv .Key ] = make ([]string , 1 )
136+ metadataMap [kv .Key ][0 ] = val .StringValue
137+ case * otlpcommon.AnyValue_ArrayValue :
138+ metadataMap [kv .Key ] = make ([]string , len (val .ArrayValue .Values ))
139+ for i , v := range val .ArrayValue .Values {
140+ metadataMap [kv.Key ][i ] = v .GetStringValue ()
141+ }
134142 }
135143 }
136144 return metadataMap
0 commit comments