Browse Source

Get latest revision "github.com/fatih/structs"

xormplus 8 years ago
parent
commit
cd34d1f1e9
1 changed files with 12 additions and 5 deletions
  1. 12 5
      vendor/github.com/fatih/structs/structs.go

+ 12 - 5
vendor/github.com/fatih/structs/structs.go

@@ -530,15 +530,22 @@ func (s *Struct) nested(val reflect.Value) interface{} {
 			finalVal = m
 		}
 	case reflect.Map:
-		v := val.Type().Elem()
-		if v.Kind() == reflect.Ptr {
-			v = v.Elem()
+		// get the element type of the map
+		mapElem := val.Type()
+		switch val.Type().Kind() {
+		case reflect.Ptr, reflect.Array, reflect.Map,
+			reflect.Slice, reflect.Chan:
+			mapElem = val.Type().Elem()
+			if mapElem.Kind() == reflect.Ptr {
+				mapElem = mapElem.Elem()
+			}
 		}
 
 		// only iterate over struct types, ie: map[string]StructType,
 		// map[string][]StructType,
-		if v.Kind() == reflect.Struct ||
-			(v.Kind() == reflect.Slice && v.Elem().Kind() == reflect.Struct) {
+		if mapElem.Kind() == reflect.Struct ||
+			(mapElem.Kind() == reflect.Slice &&
+				mapElem.Elem().Kind() == reflect.Struct) {
 			m := make(map[string]interface{}, val.Len())
 			for _, k := range val.MapKeys() {
 				m[k.String()] = s.nested(val.MapIndex(k))