github.com/System-Glitch/goyave/v2@v2.10.3-0.20200819142921-51011e75d504/validation/numeric.go (about) 1 package validation 2 3 import ( 4 "reflect" 5 "strconv" 6 "strings" 7 8 "github.com/System-Glitch/goyave/v2/helper" 9 ) 10 11 func validateNumeric(field string, value interface{}, parameters []string, form map[string]interface{}) bool { 12 rv := reflect.ValueOf(value) 13 kind := rv.Kind().String() 14 switch { 15 case strings.HasPrefix(kind, "float"): 16 return true 17 case strings.HasPrefix(kind, "int"), strings.HasPrefix(kind, "uint") && kind != "uintptr": 18 floatVal, err := helper.ToFloat64(value) 19 ok := err == nil 20 if ok { 21 form[field] = floatVal 22 } 23 return ok 24 case kind == "string": 25 floatVal, err := strconv.ParseFloat(value.(string), 64) 26 ok := err == nil 27 if ok { 28 form[field] = floatVal 29 } 30 return ok 31 default: 32 return false 33 } 34 } 35 36 func validateInteger(field string, value interface{}, parameters []string, form map[string]interface{}) bool { 37 rv := reflect.ValueOf(value) 38 kind := rv.Kind().String() 39 switch { 40 case strings.HasPrefix(kind, "int"), strings.HasPrefix(kind, "uint") && kind != "uintptr": 41 return true 42 case strings.HasPrefix(kind, "float"): 43 if kind == "float64" { 44 val, _ := value.(float64) 45 if val-float64(int(val)) > 0 { 46 return false 47 } 48 form[field] = int(val) 49 return true 50 } 51 52 val, _ := value.(float32) 53 if val-float32(int(val)) > 0 { 54 return false 55 } 56 form[field] = int(val) 57 return true 58 case kind == "string": 59 intVal, err := strconv.Atoi(value.(string)) 60 if err == nil { 61 form[field] = intVal 62 } 63 return err == nil 64 default: 65 return false 66 } 67 }