From 34281d5fe0df99719db25ca1206729bef0b4e09b Mon Sep 17 00:00:00 2001 From: Theo Date: Wed, 24 Oct 2018 16:44:55 +0100 Subject: [PATCH] Code review fixes --- caste.go | 133 +++++++------------------------------------------------ 1 file changed, 16 insertions(+), 117 deletions(-) diff --git a/caste.go b/caste.go index 616a8fc..f41c264 100644 --- a/caste.go +++ b/caste.go @@ -1019,66 +1019,16 @@ func ToStringMapIntE(i interface{}) (map[string]int, error) { return m, fmt.Errorf("unable to cast %#v of type %T to map[string]int", i, i) } - kind := reflect.TypeOf(i).Elem().Kind() - switch kind { - case reflect.Int8: - for k, val := range i.(map[string]int8) { - m[k] = ToInt(val) + mVal := reflect.ValueOf(m) + v := reflect.ValueOf(i) + for _, keyVal := range v.MapKeys() { + val, err := ToIntE(v.MapIndex(keyVal).Interface()) + if err != nil { + return m, fmt.Errorf("unable to cast %#v of type %T to map[string]int", i, i) } - return m, nil - case reflect.Int16: - for k, val := range i.(map[string]int16) { - m[k] = ToInt(val) - } - return m, nil - case reflect.Int32: - for k, val := range i.(map[string]int32) { - m[k] = ToInt(val) - } - return m, nil - case reflect.Int64: - for k, val := range i.(map[string]int64) { - m[k] = ToInt(val) - } - return m, nil - case reflect.Uint: - for k, val := range i.(map[string]uint) { - m[k] = ToInt(val) - } - return m, nil - case reflect.Uint8: - for k, val := range i.(map[string]uint8) { - m[k] = ToInt(val) - } - return m, nil - case reflect.Uint16: - for k, val := range i.(map[string]uint16) { - m[k] = ToInt(val) - } - return m, nil - case reflect.Uint32: - for k, val := range i.(map[string]uint32) { - m[k] = ToInt(val) - } - return m, nil - case reflect.Float32: - for k, val := range i.(map[string]float32) { - m[k] = ToInt(val) - } - return m, nil - case reflect.Float64: - for k, val := range i.(map[string]float64) { - m[k] = ToInt(val) - } - return m, nil - case reflect.Bool: - for k, val := range i.(map[string]bool) { - m[k] = ToInt(val) - } - return m, nil - default: - return m, fmt.Errorf("unable to cast %#v of type %T to map[string]int", i, i) + mVal.SetMapIndex(keyVal, reflect.ValueOf(val)) } + return m, nil } // ToStringMapInt64E casts an interface to a map[string]int64{} type. @@ -1109,67 +1059,16 @@ func ToStringMapInt64E(i interface{}) (map[string]int64, error) { if reflect.TypeOf(i).Kind() != reflect.Map { return m, fmt.Errorf("unable to cast %#v of type %T to map[string]int64", i, i) } - - kind := reflect.TypeOf(i).Elem().Kind() - switch kind { - case reflect.Int8: - for k, val := range i.(map[string]int8) { - m[k] = ToInt64(val) + mVal := reflect.ValueOf(m) + v := reflect.ValueOf(i) + for _, keyVal := range v.MapKeys() { + val, err := ToInt64E(v.MapIndex(keyVal).Interface()) + if err != nil { + return m, fmt.Errorf("unable to cast %#v of type %T to map[string]int64", i, i) } - return m, nil - case reflect.Int16: - for k, val := range i.(map[string]int16) { - m[k] = ToInt64(val) - } - return m, nil - case reflect.Int32: - for k, val := range i.(map[string]int32) { - m[k] = ToInt64(val) - } - return m, nil - case reflect.Int: - for k, val := range i.(map[string]int) { - m[k] = ToInt64(val) - } - return m, nil - case reflect.Uint: - for k, val := range i.(map[string]uint) { - m[k] = ToInt64(val) - } - return m, nil - case reflect.Uint8: - for k, val := range i.(map[string]uint8) { - m[k] = ToInt64(val) - } - return m, nil - case reflect.Uint16: - for k, val := range i.(map[string]uint16) { - m[k] = ToInt64(val) - } - return m, nil - case reflect.Uint32: - for k, val := range i.(map[string]uint32) { - m[k] = ToInt64(val) - } - return m, nil - case reflect.Float32: - for k, val := range i.(map[string]float32) { - m[k] = ToInt64(val) - } - return m, nil - case reflect.Float64: - for k, val := range i.(map[string]float64) { - m[k] = ToInt64(val) - } - return m, nil - case reflect.Bool: - for k, val := range i.(map[string]bool) { - m[k] = ToInt64(val) - } - return m, nil - default: - return m, fmt.Errorf("unable to cast %#v of type %T to map[string]int64", i, i) + mVal.SetMapIndex(keyVal, reflect.ValueOf(val)) } + return m, nil } // ToSliceE casts an interface to a []interface{} type.