...
1
2
3
4 package grpc_opentracing
5
6 import (
7 "encoding/base64"
8 "strings"
9
10 "google.golang.org/grpc/metadata"
11 )
12
13 const (
14 binHdrSuffix = "-bin"
15 )
16
17
18 type metadataTextMap metadata.MD
19
20
21 func (m metadataTextMap) Set(key, val string) {
22
23 encodedKey, encodedVal := encodeKeyValue(key, val)
24
25
26 m[encodedKey] = []string{encodedVal}
27 }
28
29
30 func (m metadataTextMap) ForeachKey(callback func(key, val string) error) error {
31 for k, vv := range m {
32 for _, v := range vv {
33 if err := callback(k, v); err != nil {
34 return err
35 }
36 }
37 }
38 return nil
39 }
40
41
42
43 func encodeKeyValue(k, v string) (string, string) {
44 k = strings.ToLower(k)
45 if strings.HasSuffix(k, binHdrSuffix) {
46 val := base64.StdEncoding.EncodeToString([]byte(v))
47 v = string(val)
48 }
49 return k, v
50 }
51
View as plain text