From e970a3546a0635989d27e68d9741118d99d11490 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vin=C3=ADcius=20Garcia?= Date: Wed, 22 Dec 2021 19:19:53 -0300 Subject: [PATCH] Fix bug on StrucToMap that was including fields not tagged with ksql --- kstructs/structs.go | 4 ++++ kstructs/structs_test.go | 18 ++++++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/kstructs/structs.go b/kstructs/structs.go index 80959c0..968de3a 100644 --- a/kstructs/structs.go +++ b/kstructs/structs.go @@ -107,6 +107,10 @@ func StructToMap(obj interface{}) (map[string]interface{}, error) { m := map[string]interface{}{} for i := 0; i < v.NumField(); i++ { + if !info.ByIndex(i).Valid { + continue + } + field := v.Field(i) ft := field.Type() if ft.Kind() == reflect.Ptr { diff --git a/kstructs/structs_test.go b/kstructs/structs_test.go index 3887be2..b9cb98f 100644 --- a/kstructs/structs_test.go +++ b/kstructs/structs_test.go @@ -67,6 +67,24 @@ func TestStructToMap(t *testing.T) { assert.Equal(t, nil, err) assert.Equal(t, map[string]interface{}{}, m) }) + + t.Run("should ignore fields not tagged with ksql", func(t *testing.T) { + m, err := StructToMap(struct { + Name string `ksql:"name_attr"` + Age int `ksql:"age_attr"` + NotPartOfTheQuery int + }{ + Name: "fake-name", + Age: 42, + NotPartOfTheQuery: 42, + }) + + assert.Equal(t, nil, err) + assert.Equal(t, map[string]interface{}{ + "name_attr": "fake-name", + "age_attr": 42, + }, m) + }) } func TestFillStructWith(t *testing.T) {