diff --git a/go/utils/structwalk/walk.go b/go/utils/structwalk/walk.go deleted file mode 100644 index 54752db1f3a..00000000000 --- a/go/utils/structwalk/walk.go +++ /dev/null @@ -1,51 +0,0 @@ -package structwalk - -import ( - "reflect" -) - -func Walk(v any, f func(sf reflect.StructField, depth int) error) error { - return walkStruct(v, 0, f) -} - -func walkStruct(v any, depth int, f func(sf reflect.StructField, depth int) error) error { - t := reflect.TypeOf(v) - if t.Kind() == reflect.Ptr { - t = t.Elem() - } - - return walkFields(t, depth, f) -} - -func walkFields(t reflect.Type, depth int, f func(sf reflect.StructField, depth int) error) error { - for i := 0; i < t.NumField(); i++ { - field := t.Field(i) - err := processField(field, depth, f) - if err != nil { - return err - } - } - - return nil -} - -func processField(field reflect.StructField, depth int, f func(sf reflect.StructField, depth int) error) error { - if err := f(field, depth); err != nil { - return err - } - - if field.Type.Kind() == reflect.Ptr || field.Type.Kind() == reflect.Slice { - if field.Type.Elem().Kind() == reflect.Struct { - t := field.Type.Elem() - if err := walkFields(t, depth+1, f); err != nil { - return err - } - } - } else if field.Type.Kind() == reflect.Struct { - if err := walkFields(field.Type, depth+1, f); err != nil { - return err - } - } - - return nil -} diff --git a/go/utils/structwalk/walk_test.go b/go/utils/structwalk/walk_test.go deleted file mode 100644 index 343ec20c033..00000000000 --- a/go/utils/structwalk/walk_test.go +++ /dev/null @@ -1,78 +0,0 @@ -package structwalk - -import ( - "github.com/stretchr/testify/require" - "reflect" - "testing" -) - -func TestWalk(t *testing.T) { - type innerStruct struct { - Five *string `json:"five"` - } - - type testStruct struct { - One string `json:"one"` - Two int `json:"two"` - Three bool `json:"three"` - Four *innerStruct `json:"four"` - Six []string `json:"six"` - } - - expected := []struct { - name string - typeStr string - depth int - json string - }{ - { - name: "One", - typeStr: "string", - depth: 0, - json: "one", - }, - { - name: "Two", - typeStr: "int", - depth: 0, - json: "two", - }, - { - name: "Three", - typeStr: "bool", - depth: 0, - json: "three", - }, - { - name: "Four", - typeStr: "*structwalk.innerStruct", - depth: 0, - json: "four", - }, - { - name: "Five", - typeStr: "*string", - depth: 1, - json: "five", - }, - { - name: "Six", - typeStr: "[]string", - depth: 0, - json: "six", - }, - } - - var n int - err := Walk(&testStruct{}, func(sf reflect.StructField, depth int) error { - require.Equal(t, expected[n].name, sf.Name) - require.Equal(t, expected[n].typeStr, sf.Type.String()) - require.Equal(t, expected[n].depth, depth) - require.Equal(t, expected[n].json, sf.Tag.Get("json")) - n++ - return nil - }) - - require.NoError(t, err) - require.Equal(t, len(expected), n) -}