forked from tidepool-org/platform
-
Notifications
You must be signed in to change notification settings - Fork 0
/
errors.go
210 lines (171 loc) · 9.41 KB
/
errors.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
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
package validator
import (
"fmt"
"regexp"
"strconv"
"strings"
"time"
"github.com/tidepool-org/platform/errors"
)
const (
ErrorCodeValueNotExists = "value-not-exists"
ErrorCodeValueExists = "value-exists"
ErrorCodeValueNotEmpty = "value-not-empty"
ErrorCodeValueEmpty = "value-empty"
ErrorCodeValueNotTrue = "value-not-true"
ErrorCodeValueNotFalse = "value-not-false"
ErrorCodeValueOutOfRange = "value-out-of-range"
ErrorCodeValueDisallowed = "value-disallowed"
ErrorCodeValueNotAllowed = "value-not-allowed"
ErrorCodeValueMatches = "value-matches"
ErrorCodeValueNotMatches = "value-not-matches"
ErrorCodeValueZero = "value-zero"
ErrorCodeValueNotZero = "value-not-zero"
ErrorCodeValueNotAfter = "value-not-after"
ErrorCodeValueNotBefore = "value-not-before"
ErrorCodeLengthOutOfRange = "length-out-of-range"
)
func ErrorValueNotExists() error {
return errors.Prepared(ErrorCodeValueNotExists, "value does not exist", "value does not exist")
}
func ErrorValueExists() error {
return errors.Prepared(ErrorCodeValueExists, "value exists", "value exists")
}
func ErrorValueNotEmpty() error {
return errors.Prepared(ErrorCodeValueNotEmpty, "value is not empty", "value is not empty")
}
func ErrorValueEmpty() error {
return errors.Prepared(ErrorCodeValueEmpty, "value is empty", "value is empty")
}
func ErrorValueNotTrue() error {
return errors.Prepared(ErrorCodeValueNotTrue, "value is not true", "value is not true")
}
func ErrorValueNotFalse() error {
return errors.Prepared(ErrorCodeValueNotFalse, "value is not false", "value is not false")
}
func ErrorValueNotEqualTo(value interface{}, limit interface{}) error {
return errors.Preparedf(ErrorCodeValueOutOfRange, "value is out of range", "value %v is not equal to %v", QuoteIfString(value), QuoteIfString(limit))
}
func ErrorValueEqualTo(value interface{}, limit interface{}) error {
return errors.Preparedf(ErrorCodeValueOutOfRange, "value is out of range", "value %v is equal to %v", QuoteIfString(value), QuoteIfString(limit))
}
func ErrorValueNotLessThan(value interface{}, limit interface{}) error {
return errors.Preparedf(ErrorCodeValueOutOfRange, "value is out of range", "value %v is not less than %v", QuoteIfString(value), QuoteIfString(limit))
}
func ErrorValueNotLessThanOrEqualTo(value interface{}, limit interface{}) error {
return errors.Preparedf(ErrorCodeValueOutOfRange, "value is out of range", "value %v is not less than or equal to %v", QuoteIfString(value), QuoteIfString(limit))
}
func ErrorValueNotGreaterThan(value interface{}, limit interface{}) error {
return errors.Preparedf(ErrorCodeValueOutOfRange, "value is out of range", "value %v is not greater than %v", QuoteIfString(value), QuoteIfString(limit))
}
func ErrorValueNotGreaterThanOrEqualTo(value interface{}, limit interface{}) error {
return errors.Preparedf(ErrorCodeValueOutOfRange, "value is out of range", "value %v is not greater than or equal to %v", QuoteIfString(value), QuoteIfString(limit))
}
func ErrorValueNotInRange(value interface{}, lowerLimit interface{}, upperLimit interface{}) error {
return errors.Preparedf(ErrorCodeValueOutOfRange, "value is out of range", "value %v is not between %v and %v", QuoteIfString(value), QuoteIfString(lowerLimit), QuoteIfString(upperLimit))
}
func ErrorValueFloat64OneOf(value float64, disallowedValues []float64) error {
disallowedValuesStrings := []string{}
for _, disallowedValue := range disallowedValues {
disallowedValuesStrings = append(disallowedValuesStrings, fmt.Sprintf("%v", disallowedValue))
}
disallowedValuesString := strings.Join(disallowedValuesStrings, ", ")
return errors.Preparedf(ErrorCodeValueDisallowed, "value is one of the disallowed values", "value %v is one of [%s]", value, disallowedValuesString)
}
func ErrorValueFloat64NotOneOf(value float64, allowedValues []float64) error {
allowedValuesStrings := []string{}
for _, allowedValue := range allowedValues {
allowedValuesStrings = append(allowedValuesStrings, fmt.Sprintf("%v", allowedValue))
}
allowedValuesString := strings.Join(allowedValuesStrings, ", ")
return errors.Preparedf(ErrorCodeValueNotAllowed, "value is not one of the allowed values", "value %v is not one of [%s]", value, allowedValuesString)
}
func ErrorValueIntOneOf(value int, disallowedValues []int) error {
disallowedValuesStrings := []string{}
for _, disallowedValue := range disallowedValues {
disallowedValuesStrings = append(disallowedValuesStrings, fmt.Sprintf("%d", disallowedValue))
}
disallowedValuesString := strings.Join(disallowedValuesStrings, ", ")
return errors.Preparedf(ErrorCodeValueDisallowed, "value is one of the disallowed values", "value %d is one of [%s]", value, disallowedValuesString)
}
func ErrorValueIntNotOneOf(value int, allowedValues []int) error {
allowedValuesStrings := []string{}
for _, allowedValue := range allowedValues {
allowedValuesStrings = append(allowedValuesStrings, fmt.Sprintf("%d", allowedValue))
}
allowedValuesString := strings.Join(allowedValuesStrings, ", ")
return errors.Preparedf(ErrorCodeValueNotAllowed, "value is not one of the allowed values", "value %d is not one of [%s]", value, allowedValuesString)
}
func ErrorValueStringOneOf(value string, disallowedValues []string) error {
disallowedValuesStrings := []string{}
for _, disallowedValue := range disallowedValues {
disallowedValuesStrings = append(disallowedValuesStrings, strconv.Quote(disallowedValue))
}
disallowedValuesString := strings.Join(disallowedValuesStrings, ", ")
return errors.Preparedf(ErrorCodeValueDisallowed, "value is one of the disallowed values", "value %q is one of [%v]", value, disallowedValuesString)
}
func ErrorValueStringNotOneOf(value string, allowedValues []string) error {
allowedValuesStrings := []string{}
for _, allowedValue := range allowedValues {
allowedValuesStrings = append(allowedValuesStrings, strconv.Quote(allowedValue))
}
allowedValuesString := strings.Join(allowedValuesStrings, ", ")
return errors.Preparedf(ErrorCodeValueNotAllowed, "value is not one of the allowed values", "value %q is not one of [%v]", value, allowedValuesString)
}
func ErrorValueStringMatches(value string, expression *regexp.Regexp) error {
return errors.Preparedf(ErrorCodeValueMatches, "value matches expression", "value %q matches expression %q", value, ExpressionAsString(expression))
}
func ErrorValueStringNotMatches(value string, expression *regexp.Regexp) error {
return errors.Preparedf(ErrorCodeValueNotMatches, "value does not match expression", "value %q does not match expression %q", value, ExpressionAsString(expression))
}
func ErrorValueTimeZero(value time.Time) error {
return errors.Preparedf(ErrorCodeValueZero, "value is zero", "value %q is zero", value.Format(time.RFC3339))
}
func ErrorValueTimeNotZero(value time.Time) error {
return errors.Preparedf(ErrorCodeValueNotZero, "value is not zero", "value %q is not zero", value.Format(time.RFC3339))
}
func ErrorValueTimeNotAfter(value time.Time, limit time.Time) error {
return errors.Preparedf(ErrorCodeValueNotAfter, "value is not after the specified time", "value %q is not after %q", value.Format(time.RFC3339), limit.Format(time.RFC3339))
}
func ErrorValueTimeNotAfterNow(value time.Time) error {
return errors.Preparedf(ErrorCodeValueNotAfter, "value is not after the specified time", "value %q is not after now", value.Format(time.RFC3339))
}
func ErrorValueTimeNotBefore(value time.Time, limit time.Time) error {
return errors.Preparedf(ErrorCodeValueNotBefore, "value is not before the specified time", "value %q is not before %q", value.Format(time.RFC3339), limit.Format(time.RFC3339))
}
func ErrorValueTimeNotBeforeNow(value time.Time) error {
return errors.Preparedf(ErrorCodeValueNotBefore, "value is not before the specified time", "value %q is not before now", value.Format(time.RFC3339))
}
func ErrorLengthNotEqualTo(length int, limit int) error {
return errors.Preparedf(ErrorCodeLengthOutOfRange, "length is out of range", "length %d is not equal to %d", length, limit)
}
func ErrorLengthEqualTo(length int, limit int) error {
return errors.Preparedf(ErrorCodeLengthOutOfRange, "length is out of range", "length %d is equal to %d", length, limit)
}
func ErrorLengthNotLessThan(length int, limit int) error {
return errors.Preparedf(ErrorCodeLengthOutOfRange, "length is out of range", "length %d is not less than %d", length, limit)
}
func ErrorLengthNotLessThanOrEqualTo(length int, limit int) error {
return errors.Preparedf(ErrorCodeLengthOutOfRange, "length is out of range", "length %d is not less than or equal to %d", length, limit)
}
func ErrorLengthNotGreaterThan(length int, limit int) error {
return errors.Preparedf(ErrorCodeLengthOutOfRange, "length is out of range", "length %d is not greater than %d", length, limit)
}
func ErrorLengthNotGreaterThanOrEqualTo(length int, limit int) error {
return errors.Preparedf(ErrorCodeLengthOutOfRange, "length is out of range", "length %d is not greater than or equal to %d", length, limit)
}
func ErrorLengthNotInRange(length int, lowerLimit int, upperLimit int) error {
return errors.Preparedf(ErrorCodeLengthOutOfRange, "length is out of range", "length %d is not between %d and %d", length, lowerLimit, upperLimit)
}
func QuoteIfString(interfaceValue interface{}) interface{} {
if stringValue, ok := interfaceValue.(string); ok {
return strconv.Quote(stringValue)
}
return interfaceValue
}
func ExpressionAsString(expression *regexp.Regexp) string {
if expression == nil {
return "<MISSING>"
}
return expression.String()
}