Merge pull request #78539 from pmorie/unstructured-helpers-godoc

Unstructed helpers: document lack of slice syntax
This commit is contained in:
Kubernetes Prow Robot 2019-08-20 20:39:29 -07:00 committed by GitHub
commit fee0c4bd40
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 20 additions and 2 deletions

View File

@ -32,6 +32,9 @@ import (
// NestedFieldCopy returns a deep copy of the value of a nested field.
// Returns false if the value is missing.
// No error is returned for a nil field.
//
// Note: fields passed to this function are treated as keys within the passed
// object; no array/slice syntax is supported.
func NestedFieldCopy(obj map[string]interface{}, fields ...string) (interface{}, bool, error) {
val, found, err := NestedFieldNoCopy(obj, fields...)
if !found || err != nil {
@ -43,6 +46,9 @@ func NestedFieldCopy(obj map[string]interface{}, fields ...string) (interface{},
// NestedFieldNoCopy returns a reference to a nested field.
// Returns false if value is not found and an error if unable
// to traverse obj.
//
// Note: fields passed to this function are treated as keys within the passed
// object; no array/slice syntax is supported.
func NestedFieldNoCopy(obj map[string]interface{}, fields ...string) (interface{}, bool, error) {
var val interface{} = obj

View File

@ -67,6 +67,11 @@ func TestNestedFieldNoCopy(t *testing.T) {
"b": target,
"c": nil,
"d": []interface{}{"foo"},
"e": []interface{}{
map[string]interface{}{
"f": "bar",
},
},
},
}
@ -91,13 +96,13 @@ func TestNestedFieldNoCopy(t *testing.T) {
assert.Nil(t, res)
// case 4: field does not exist
res, exists, err = NestedFieldNoCopy(obj, "a", "e")
res, exists, err = NestedFieldNoCopy(obj, "a", "g")
assert.False(t, exists)
assert.Nil(t, err)
assert.Nil(t, res)
// case 5: intermediate field does not exist
res, exists, err = NestedFieldNoCopy(obj, "a", "e", "f")
res, exists, err = NestedFieldNoCopy(obj, "a", "g", "f")
assert.False(t, exists)
assert.Nil(t, err)
assert.Nil(t, res)
@ -108,6 +113,13 @@ func TestNestedFieldNoCopy(t *testing.T) {
assert.False(t, exists)
assert.Nil(t, err)
assert.Nil(t, res)
// case 7: array/slice syntax is not supported
// (background: users may expect this to be supported)
res, exists, err = NestedFieldNoCopy(obj, "a", "e[0]")
assert.False(t, exists)
assert.Nil(t, err)
assert.Nil(t, res)
}
func TestNestedFieldCopy(t *testing.T) {