diff --git a/metadata/metadata.go b/metadata/metadata.go index 4718f420..bf7a8d3a 100644 --- a/metadata/metadata.go +++ b/metadata/metadata.go @@ -98,11 +98,12 @@ func (md Metadata) Del(keys ...string) { } // Copy makes a copy of the metadata -func Copy(md Metadata) Metadata { +func Copy(md Metadata, exclude ...string) Metadata { nmd := New(len(md)) for key, val := range md { nmd.Set(key, val) } + nmd.Del(exclude...) return nmd } diff --git a/metadata/metadata_test.go b/metadata/metadata_test.go index eccea7a7..a5381ede 100644 --- a/metadata/metadata_test.go +++ b/metadata/metadata_test.go @@ -190,3 +190,14 @@ func TestMetadataContext(t *testing.T) { t.Errorf("Expected metadata length 1 got %d", i) } } + +func TestCopy(t *testing.T) { + md := New(2) + md.Set("key1", "val1", "key2", "val2") + nmd := Copy(md, "key2") + if len(nmd) != 1 { + t.Fatal("Copy exclude not works") + } else if nmd["Key1"] != "val1" { + t.Fatal("Copy exclude not works") + } +}