...
1
2
3
4 package metautils
5
6 import (
7 "context"
8 "strings"
9
10 "google.golang.org/grpc/metadata"
11 )
12
13
14 type NiceMD metadata.MD
15
16
17
18
19
20 func ExtractIncoming(ctx context.Context) NiceMD {
21 md, ok := metadata.FromIncomingContext(ctx)
22 if !ok {
23 return NiceMD(metadata.Pairs())
24 }
25 return NiceMD(md)
26 }
27
28
29
30
31
32 func ExtractOutgoing(ctx context.Context) NiceMD {
33 md, ok := metadata.FromOutgoingContext(ctx)
34 if !ok {
35 return NiceMD(metadata.Pairs())
36 }
37 return NiceMD(md)
38 }
39
40
41
42
43
44 func (m NiceMD) Clone(copiedKeys ...string) NiceMD {
45 newMd := NiceMD(metadata.Pairs())
46 for k, vv := range m {
47 found := false
48 if len(copiedKeys) == 0 {
49 found = true
50 } else {
51 for _, allowedKey := range copiedKeys {
52 if strings.EqualFold(allowedKey, k) {
53 found = true
54 break
55 }
56 }
57 }
58 if !found {
59 continue
60 }
61 newMd[k] = make([]string, len(vv))
62 copy(newMd[k], vv)
63 }
64 return newMd
65 }
66
67
68 func (m NiceMD) ToOutgoing(ctx context.Context) context.Context {
69 return metadata.NewOutgoingContext(ctx, metadata.MD(m))
70 }
71
72
73
74
75 func (m NiceMD) ToIncoming(ctx context.Context) context.Context {
76 return metadata.NewIncomingContext(ctx, metadata.MD(m))
77 }
78
79
80
81
82
83
84
85 func (m NiceMD) Get(key string) string {
86 k := strings.ToLower(key)
87 vv, ok := m[k]
88 if !ok {
89 return ""
90 }
91 return vv[0]
92 }
93
94
95
96
97
98
99
100 func (m NiceMD) Del(key string) NiceMD {
101 k := strings.ToLower(key)
102 delete(m, k)
103 return m
104 }
105
106
107
108
109
110
111 func (m NiceMD) Set(key string, value string) NiceMD {
112 k := strings.ToLower(key)
113 m[k] = []string{value}
114 return m
115 }
116
117
118
119
120
121
122 func (m NiceMD) Add(key string, value string) NiceMD {
123 k := strings.ToLower(key)
124 m[k] = append(m[k], value)
125 return m
126 }
127
View as plain text