metadata: add Pairs helper func
Signed-off-by: Vasiliy Tolstov <v.tolstov@unistack.org>
This commit is contained in:
		| @@ -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) | ||||||
|   | |||||||
| @@ -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 | ||||||
|  | } | ||||||
|   | |||||||
| @@ -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") | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user