From 11a8cc99b8f28a9b3c423d5359e0359b1296170c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Charles-Edouard=20Br=C3=A9t=C3=A9ch=C3=A9?= Date: Fri, 9 Feb 2024 17:04:55 +0100 Subject: [PATCH] fix: map mutation (#304) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Charles-Edouard Brétéché --- pkg/engine/mutate/parse.go | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/pkg/engine/mutate/parse.go b/pkg/engine/mutate/parse.go index bc732cd1..95521e21 100644 --- a/pkg/engine/mutate/parse.go +++ b/pkg/engine/mutate/parse.go @@ -40,12 +40,13 @@ func (n mapNode) mutate(ctx context.Context, path *field.Path, value any, bindin out := map[any]any{} for k, v := range n { // TODO: very simple implementation - mapValue := reflect.ValueOf(value).MapIndex(reflect.ValueOf(k)) - if !mapValue.IsValid() { - continue + var value any + if value != nil { + mapValue := reflect.ValueOf(value).MapIndex(reflect.ValueOf(k)) + if !mapValue.IsValid() { + value = mapValue.Interface() + } } - value := mapValue.Interface() - // TODO: does it make sense to take valueOf.Index(i).Interface() here ? if inner, err := v.mutate(ctx, path.Child(fmt.Sprint(k)), value, bindings, opts...); err != nil { return nil, err } else {