unstructured: return not-found if intermediate path is not found

This commit is contained in:
Dr. Stefan Schimanski 2018-11-20 17:18:45 +01:00
parent 27d8290cbf
commit 52b1718a63
2 changed files with 16 additions and 0 deletions

View File

@ -47,6 +47,9 @@ func NestedFieldNoCopy(obj map[string]interface{}, fields ...string) (interface{
var val interface{} = obj
for i, field := range fields {
if val == nil {
return nil, false, nil
}
if m, ok := val.(map[string]interface{}); ok {
val, ok = m[field]
if !ok {

View File

@ -95,6 +95,19 @@ func TestNestedFieldNoCopy(t *testing.T) {
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")
assert.False(t, exists)
assert.Nil(t, err)
assert.Nil(t, res)
// case 6: intermediate field is null
// (background: happens easily in YAML)
res, exists, err = NestedFieldNoCopy(obj, "a", "c", "f")
assert.False(t, exists)
assert.Nil(t, err)
assert.Nil(t, res)
}
func TestNestedFieldCopy(t *testing.T) {