From 18c1612862417d966e23a033d47b8b7bfa7f2852 Mon Sep 17 00:00:00 2001 From: Arvydas Sidorenko Date: Mon, 26 Aug 2019 16:45:59 +0200 Subject: [PATCH] Simplify DataType() --- keywords.go | 32 +++++++++++++------------------- 1 file changed, 13 insertions(+), 19 deletions(-) diff --git a/keywords.go b/keywords.go index 9340695..f8467ad 100644 --- a/keywords.go +++ b/keywords.go @@ -19,16 +19,6 @@ var primitiveTypes = map[string]bool{ "integer": true, } -var dataTypes = map[reflect.Kind]string{ - reflect.Bool: "boolean", - reflect.Float64: "number", - reflect.String: "string", - reflect.Array: "array", - reflect.Slice: "array", - reflect.Map: "object", - reflect.Struct: "object", -} - // DataType gives the primitive json type of a standard json-decoded value, plus the special case // "integer" for when numbers are whole func DataType(data interface{}) string { @@ -36,20 +26,24 @@ func DataType(data interface{}) string { return "null" } - kind := reflect.TypeOf(data).Kind() - typeStr, ok := dataTypes[kind] - if !ok { - return "unknown" - } - - if kind == reflect.Float64 { + switch reflect.TypeOf(data).Kind() { + case reflect.Bool: + return "boolean" + case reflect.Float64: number := reflect.ValueOf(data).Float() if float64(int(number)) == number { return "integer" } + return "number" + case reflect.String: + return "string" + case reflect.Array, reflect.Slice: + return "array" + case reflect.Map, reflect.Struct: + return "object" + default: + return "unknown" } - - return typeStr } // Type specifies one of the six json primitive types.