metadata: add Pairs helper func

Signed-off-by: Vasiliy Tolstov <v.tolstov@unistack.org>
This commit is contained in:
Василий Толстов 2021-02-22 00:08:05 +03:00
parent b505455f7c
commit 3247da3dd0
3 changed files with 48 additions and 2 deletions

View File

@ -108,7 +108,11 @@ func NewOutgoingContext(ctx context.Context, md Metadata) context.Context {
} }
// AppendOutgoingContext apends new md to context // AppendOutgoingContext apends new md to context
func AppendOutgoingContext(ctx context.Context, md Metadata) context.Context { func AppendOutgoingContext(ctx context.Context, kv ...string) context.Context {
md, ok := Pairs(kv...)
if !ok {
return ctx
}
omd, ok := FromOutgoingContext(ctx) omd, ok := FromOutgoingContext(ctx)
if !ok { if !ok {
return NewOutgoingContext(ctx, md) return NewOutgoingContext(ctx, md)
@ -120,7 +124,11 @@ func AppendOutgoingContext(ctx context.Context, md Metadata) context.Context {
} }
// AppendIncomingContext apends new md to context // AppendIncomingContext apends new md to context
func AppendIncomingContext(ctx context.Context, md Metadata) context.Context { func AppendIncomingContext(ctx context.Context, kv ...string) context.Context {
md, ok := Pairs(kv...)
if !ok {
return ctx
}
omd, ok := FromIncomingContext(ctx) omd, ok := FromIncomingContext(ctx)
if !ok { if !ok {
return NewIncomingContext(ctx, md) return NewIncomingContext(ctx, md)

View File

@ -111,3 +111,19 @@ func Merge(omd Metadata, mmd Metadata, overwrite bool) Metadata {
} }
return nmd return nmd
} }
func Pairs(kv ...string) (Metadata, bool) {
if len(kv)%2 == 1 {
return nil, false
}
md := New(len(kv) / 2)
var k string
for i, v := range kv {
if i%2 == 0 {
k = v
continue
}
md.Set(k, v)
}
return md, true
}

View File

@ -5,6 +5,28 @@ import (
"testing" "testing"
) )
func TestAppend(t *testing.T) {
ctx := context.Background()
ctx = AppendIncomingContext(ctx, "key1", "val1", "key2", "val2")
md, ok := FromIncomingContext(ctx)
if !ok {
t.Fatal("metadata empty")
}
if _, ok := md.Get("key1"); !ok {
t.Fatal("key1 not found")
}
}
func TestPairs(t *testing.T) {
md, ok := Pairs("key1", "val1", "key2", "val2")
if !ok {
t.Fatal("odd number of kv")
}
if _, ok = md.Get("key1"); !ok {
t.Fatal("key1 not found")
}
}
func testCtx(ctx context.Context) { func testCtx(ctx context.Context) {
md := New(2) md := New(2)
md.Set("Key1", "Val1_new") md.Set("Key1", "Val1_new")