Преглед изворни кода

Merge pull request #38239 from tiborvass/filters-clone

filters: add Clone() method
Vincent Demeester пре 6 година
родитељ
комит
c7a3c3cd94
2 измењених фајлова са 24 додато и 0 уклоњено
  1. 16 0
      api/types/filters/parse.go
  2. 8 0
      api/types/filters/parse_test.go

+ 16 - 0
api/types/filters/parse.go

@@ -323,6 +323,22 @@ func (args Args) WalkValues(field string, op func(value string) error) error {
 	return nil
 }
 
+// Clone returns a copy of args.
+func (args Args) Clone() (newArgs Args) {
+	newArgs.fields = make(map[string]map[string]bool, len(args.fields))
+	for k, m := range args.fields {
+		var mm map[string]bool
+		if m != nil {
+			mm = make(map[string]bool, len(m))
+			for kk, v := range m {
+				mm[kk] = v
+			}
+		}
+		newArgs.fields[k] = mm
+	}
+	return newArgs
+}
+
 func deprecatedArgs(d map[string][]string) map[string]map[string]bool {
 	m := map[string]map[string]bool{}
 	for k, v := range d {

+ 8 - 0
api/types/filters/parse_test.go

@@ -421,3 +421,11 @@ func TestFuzzyMatch(t *testing.T) {
 		}
 	}
 }
+
+func TestClone(t *testing.T) {
+	f := NewArgs()
+	f.Add("foo", "bar")
+	f2 := f.Clone()
+	f2.Add("baz", "qux")
+	assert.Check(t, is.Len(f.Get("baz"), 0))
+}