-
Notifications
You must be signed in to change notification settings - Fork 720
/
severity.go
63 lines (49 loc) · 1.4 KB
/
severity.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
package errortypes
// Severity represents the severity level of a bid processing error.
type Severity int
const (
// SeverityUnknown represents an unknown severity level.
SeverityUnknown Severity = iota
// SeverityFatal represents a fatal bid processing error which prevents a bid response.
SeverityFatal
// SeverityWarning represents a non-fatal bid processing error where invalid or ambiguous
// data in the bid request was ignored.
SeverityWarning
)
func isFatal(err error) bool {
s, ok := err.(Coder)
return !ok || s.Severity() == SeverityFatal
}
func isWarning(err error) bool {
s, ok := err.(Coder)
return ok && s.Severity() == SeverityWarning
}
// ContainsFatalError checks if the error list contains a fatal error.
func ContainsFatalError(errors []error) bool {
for _, err := range errors {
if isFatal(err) {
return true
}
}
return false
}
// FatalOnly returns a new error list with only the fatal severity errors.
func FatalOnly(errs []error) []error {
errsFatal := make([]error, 0, len(errs))
for _, err := range errs {
if isFatal(err) {
errsFatal = append(errsFatal, err)
}
}
return errsFatal
}
// WarningOnly returns a new error list with only the warning severity errors.
func WarningOnly(errs []error) []error {
errsWarning := make([]error, 0, len(errs))
for _, err := range errs {
if isWarning(err) {
errsWarning = append(errsWarning, err)
}
}
return errsWarning
}