From 598dddc476f538f3c2d61fb5f8b2b65efb130d29 Mon Sep 17 00:00:00 2001 From: Vasiliy Tolstov Date: Sat, 19 Jun 2021 15:58:36 +0300 Subject: [PATCH] util/reflect: fix time.Time StructFields parsing Signed-off-by: Vasiliy Tolstov --- util/reflect/struct.go | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/util/reflect/struct.go b/util/reflect/struct.go index 051dc1c7..b08384ae 100644 --- a/util/reflect/struct.go +++ b/util/reflect/struct.go @@ -7,6 +7,7 @@ import ( "reflect" "regexp" "strings" + "time" ) // ErrInvalidParam specifies invalid url query params @@ -14,6 +15,8 @@ var ErrInvalidParam = errors.New("invalid url query param provided") var bracketSplitter = regexp.MustCompile(`\[|\]`) +var timeKind = reflect.TypeOf(time.Time{}).Kind() + type StructField struct { Field reflect.StructField Value reflect.Value @@ -121,13 +124,16 @@ func StructFields(src interface{}) ([]StructField, error) { if !val.CanSet() || len(fld.PkgPath) != 0 { continue } - if val.Kind() == reflect.Struct { + switch val.Kind() { + case timeKind: + fields = append(fields, StructField{Field: fld, Value: val}) + case reflect.Struct: infields, err := StructFields(val.Interface()) if err != nil { return nil, err } fields = append(fields, infields...) - } else { + default: fields = append(fields, StructField{Field: fld, Value: val}) } }