From 202a942eef8f8a34eb9ae7510defefcaa4f8fff2 Mon Sep 17 00:00:00 2001 From: Vasiliy Tolstov Date: Sat, 23 Jan 2021 00:09:07 +0300 Subject: [PATCH] metadata: add Merge func Signed-off-by: Vasiliy Tolstov --- metadata/context.go | 12 +----------- metadata/metadata.go | 15 +++++++++++++++ metadata/metadata_test.go | 14 ++++++++++++++ 3 files changed, 30 insertions(+), 11 deletions(-) diff --git a/metadata/context.go b/metadata/context.go index 06d126ce..c6bc32ae 100644 --- a/metadata/context.go +++ b/metadata/context.go @@ -35,15 +35,5 @@ func MergeContext(ctx context.Context, pmd Metadata, overwrite bool) context.Con if !ok { return context.WithValue(ctx, metadataKey{}, Copy(pmd)) } - nmd := Copy(md) - for key, val := range pmd { - if _, ok := nmd[key]; ok && !overwrite { - // skip - } else if val != "" { - nmd.Set(key, val) - } else { - nmd.Del(key) - } - } - return context.WithValue(ctx, metadataKey{}, nmd) + return context.WithValue(ctx, metadataKey{}, Merge(md, pmd, overwrite)) } diff --git a/metadata/metadata.go b/metadata/metadata.go index 528c03a8..902f22da 100644 --- a/metadata/metadata.go +++ b/metadata/metadata.go @@ -120,3 +120,18 @@ func New(size int) Metadata { } return make(Metadata, size) } + +// Merge merges metadata to existing metadata, overwriting if specified +func Merge(omd Metadata, mmd Metadata, overwrite bool) Metadata { + nmd := Copy(omd) + for key, val := range mmd { + if _, ok := nmd[key]; ok && !overwrite { + // skip + } else if val != "" { + nmd.Set(key, val) + } else { + nmd.Del(key) + } + } + return nmd +} diff --git a/metadata/metadata_test.go b/metadata/metadata_test.go index 94d51bb2..64db88e1 100644 --- a/metadata/metadata_test.go +++ b/metadata/metadata_test.go @@ -7,6 +7,20 @@ import ( "testing" ) +func TestMerge(t *testing.T) { + omd := Metadata{ + "key1": "val1", + } + mmd := Metadata{ + "key2": "val2", + } + + nmd := Merge(omd, mmd, true) + if len(nmd) != 2 { + t.Fatalf("merge failed: %v", nmd) + } +} + func TestIterator(t *testing.T) { md := Metadata{ "1Last": "last",