-
Notifications
You must be signed in to change notification settings - Fork 2
/
valid.go
135 lines (110 loc) · 2.47 KB
/
valid.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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
package core
import (
"errors"
"net/http"
"strings"
)
type IValidMessage struct {
Name string `json:"-"`
Code string `json:"code"`
Message string `json:"message"`
Data interface{} `json:"data,omitempty"`
}
func (f IValidMessage) Error() string {
return f.Message
}
// Error is the validate error
type ValidError struct {
errors []error
}
// Error implements error interface
func (err *ValidError) Error() string {
return strings.Join(err.Strings(), ", ")
}
// Errors returns errors
func (err *ValidError) Errors() []error {
return err.errors
}
// Strings returns errors in strings
func (err *ValidError) Strings() []string {
s := make([]string, len(err.errors))
for i := range err.errors {
s[i] = err.errors[i].Error()
}
return s
}
func (err *ValidError) clone() *ValidError {
return &ValidError{errors: err.errors}
}
// IsError returns true if given error is validate error
func IsError(err error) bool {
_, ok := err.(*Error)
return ok
}
// New creates new validator
func NewValid() *Valid {
return &Valid{}
}
// Validator type
type Valid struct {
err ValidError
}
// Error returns error if has error
func (v *Valid) Error() string {
return strings.Join(v.err.Strings(), ", ")
}
func (v *Valid) OriginalError() error {
return errors.New(v.Error())
}
func (v *Valid) GetCode() string {
return "BAD_REQUEST"
}
func (v *Valid) GetStatus() int {
return http.StatusBadRequest
}
func (v *Valid) JSON() interface{} {
fields := make(map[string]jsonErr)
for _, err := range v.err.errors {
fields[err.(*IValidMessage).Name] = jsonErr{
Code: err.(*IValidMessage).Code,
Message: err.(*IValidMessage).Message,
Data: err.(*IValidMessage).Data,
}
}
return NewValidatorFields(fields)
}
func (v *Valid) GetMessage() interface{} {
return v.err.Error()
}
// Valid returns true if no error
func (v *Valid) Valid() IError {
if len(v.err.errors) == 0 {
return nil
}
return v
}
// Must checks x must not an error or true if bool
// and return true if valid
//
// msg must be error or string
func (v *Valid) Must(x bool, msg *IValidMessage) bool {
if x == true || msg == nil {
return true
}
var m error
for _, err := range v.err.errors {
if err.(*IValidMessage).Name == msg.Name {
return true
}
}
m = msg
v.err.errors = append(v.err.errors, m)
return false
}
// Add adds errors
func (v *Valid) Add(err ...error) {
v.err.errors = append(v.err.errors, err...)
}
func (v *Valid) OriginalErrorMessage() string {
return v.err.Error()
}