-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtypes.go
69 lines (66 loc) · 1.71 KB
/
types.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
package govalidator
import (
"strconv"
"reflect"
)
func setWithProperType(valueKind reflect.Kind, val string, structField reflect.Value, nameInTag, nameAlias string, errors Errors) Errors {
switch valueKind {
case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
if val == "" {
val = "0"
}
intVal, err := strconv.ParseInt(val, 10, 64)
if err != nil {
errors.Add(nameInTag, nameAlias, ERR_INTERGER_TYPE, ERR_PARSE_VALUE_PARSED_INTEGER)
} else {
structField.SetInt(intVal)
}
case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64:
if val == "" {
val = "0"
}
uintVal, err := strconv.ParseUint(val, 10, 64)
if err != nil {
errors.Add(nameInTag, nameAlias, ERR_INTERGER_TYPE, ERR_PARSE_VALUE_PARSED_UNSINED_INTEGER)
} else {
structField.SetUint(uintVal)
}
case reflect.Bool:
if val == "on" {
structField.SetBool(true)
break
}
if val == "" {
val = "false"
}
boolVal, err := strconv.ParseBool(val)
if err != nil {
errors.Add(nameInTag, nameAlias, ERR_BOOLEAN_TYPE, ERR_PARSE_VALUE_PARSED_BOOLEAN)
} else if boolVal {
structField.SetBool(true)
}
case reflect.Float32:
if val == "" {
val = "0.0"
}
floatVal, err := strconv.ParseFloat(val, 32)
if err != nil {
errors.Add(nameInTag, nameAlias, ERR_FLOAT_TYPE, ERR_PARSE_VALUE_PARSED_INT_32)
} else {
structField.SetFloat(floatVal)
}
case reflect.Float64:
if val == "" {
val = "0.0"
}
floatVal, err := strconv.ParseFloat(val, 64)
if err != nil {
errors.Add(nameInTag, nameAlias, ERR_FLOAT_TYPE, ERR_PARSE_VALUE_PARSED_INT_64)
} else {
structField.SetFloat(floatVal)
}
case reflect.String:
structField.SetString(val)
}
return errors
}