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  }