From 887b48f1e75da534eb047be97a02bc3992c325a0 Mon Sep 17 00:00:00 2001 From: Vasiliy Tolstov Date: Thu, 17 Jun 2021 12:53:23 +0300 Subject: [PATCH] util/reflect: improve StructFields func Signed-off-by: Vasiliy Tolstov --- util/reflect/struct.go | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/util/reflect/struct.go b/util/reflect/struct.go index a1ac91ca..051dc1c7 100644 --- a/util/reflect/struct.go +++ b/util/reflect/struct.go @@ -14,6 +14,11 @@ var ErrInvalidParam = errors.New("invalid url query param provided") var bracketSplitter = regexp.MustCompile(`\[|\]`) +type StructField struct { + Field reflect.StructField + Value reflect.Value +} + func StructFieldByTag(src interface{}, tkey string, tval string) (interface{}, error) { sv := reflect.ValueOf(src) if sv.Kind() == reflect.Ptr { @@ -98,8 +103,8 @@ func StructFieldByName(src interface{}, tkey string) (interface{}, error) { } // StructFields returns slice of struct fields -func StructFields(src interface{}) ([]reflect.StructField, error) { - var fields []reflect.StructField +func StructFields(src interface{}) ([]StructField, error) { + var fields []StructField sv := reflect.ValueOf(src) if sv.Kind() == reflect.Ptr { @@ -123,7 +128,7 @@ func StructFields(src interface{}) ([]reflect.StructField, error) { } fields = append(fields, infields...) } else { - fields = append(fields, fld) + fields = append(fields, StructField{Field: fld, Value: val}) } }