diff --git a/rpc/metadata/metadata.go b/rpc/metadata/metadata.go index 0caf2bbc..13b5a93a 100644 --- a/rpc/metadata/metadata.go +++ b/rpc/metadata/metadata.go @@ -83,9 +83,20 @@ func DecodeKeyValue(k, v string) (string, string, error) { return key, string(val), nil } -// MD is a mapping from metadata keys to values. +// MD is a mapping from metadata keys to values. Users should use the following +// two convenience functions New and Pairs to generate MD. type MD map[string]string +// New creates a MD from given key-value map. +func New(m map[string]string) MD { + md := MD{} + for k, v := range m { + key, val := encodeKeyValue(k, v) + md[key] = val + } + return md +} + // Pairs returns an MD formed by the mapping of key, value ... // Pairs panics if len(kv) is odd. func Pairs(kv ...string) MD { diff --git a/rpc/metadata/metadata_test.go b/rpc/metadata/metadata_test.go index 1ff61a26..ef3a1b8c 100644 --- a/rpc/metadata/metadata_test.go +++ b/rpc/metadata/metadata_test.go @@ -69,7 +69,7 @@ func TestPairsMD(t *testing.T) { md MD }{ {[]string{}, MD{}}, - {[]string{"k1", "v1", "k2", binaryValue}, MD(map[string]string{ + {[]string{"k1", "v1", "k2", binaryValue}, New(map[string]string{ "k1": "v1", "k2-bin": "woA=", })},