diff --git a/metadata/metadata.go b/metadata/metadata.go index 2f1f234b..c5fddd84 100644 --- a/metadata/metadata.go +++ b/metadata/metadata.go @@ -22,6 +22,16 @@ func Copy(md Metadata) Metadata { return cmd } +// Set add key with val to metadata +func Set(ctx context.Context, k, v string) context.Context { + md, ok := FromContext(ctx) + if !ok { + md = make(Metadata) + } + md[k] = v + return context.WithValue(ctx, metaKey{}, md) +} + // Get returns a single value from metadata in the context func Get(ctx context.Context, key string) (string, bool) { md, ok := FromContext(ctx) diff --git a/metadata/metadata_test.go b/metadata/metadata_test.go index 764cc680..8dacfa84 100644 --- a/metadata/metadata_test.go +++ b/metadata/metadata_test.go @@ -6,6 +6,18 @@ import ( "testing" ) +func TestMetadataSet(t *testing.T) { + ctx := Set(context.TODO(), "Key", "val") + + val, ok := Get(ctx, "Key") + if !ok { + t.Fatal("key Key not found") + } + if val != "val" { + t.Errorf("key Key with value val != %v", val) + } +} + func TestMetadataCopy(t *testing.T) { md := Metadata{ "Foo": "bar",