-
Notifications
You must be signed in to change notification settings - Fork 2
/
is.go
144 lines (128 loc) · 2.56 KB
/
is.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
package vice
import "errors"
// Is reports whether any error in err's chain implements the behaviour
// described by the provided Vice, v.
func Is(err error, v Vice) bool {
switch v {
case Timeout:
return isTimeout(err)
case Temporary:
return isTemporary(err)
case Closed:
return isClosed(err)
case AuthRequired:
return isAuthRequired(err)
case AuthFailed:
return isAuthFailed(err)
case Permission:
return isPermission(err)
case Conflict:
return isConflict(err)
case InvalidArgument:
return isInvalidArgument(err)
case NotFound:
return isNotFound(err)
case Internal:
return isInternal(err)
case Canceled:
return isCanceled(err)
case PreconditionFailed:
return isPreconditionFailed(err)
case NoVice:
return isNoVice(err)
default:
return false
}
}
func isTimeout(err error) bool {
var e interface{ Timeout() bool }
if errors.As(err, &e) {
return e.Timeout()
}
return false
}
func isTemporary(err error) bool {
var e interface{ Temporary() bool }
if errors.As(err, &e) {
return e.Temporary()
}
return false
}
func isClosed(err error) bool {
var e interface{ Closed() bool }
if errors.As(err, &e) {
return e.Closed()
}
return false
}
func isAuthRequired(err error) bool {
var e interface{ AuthRequired() bool }
if errors.As(err, &e) {
return e.AuthRequired()
}
return false
}
func isAuthFailed(err error) bool {
var e interface{ AuthFailed() bool }
if errors.As(err, &e) {
return e.AuthFailed()
}
return false
}
func isPermission(err error) bool {
var e interface{ Permission() bool }
if errors.As(err, &e) {
return e.Permission()
}
return false
}
func isConflict(err error) bool {
var e interface{ Conflict() bool }
if errors.As(err, &e) {
return e.Conflict()
}
return false
}
func isInvalidArgument(err error) bool {
var e interface{ InvalidArgument() bool }
if errors.As(err, &e) {
return e.InvalidArgument()
}
return false
}
func isNotFound(err error) bool {
var e interface{ NotFound() bool }
if errors.As(err, &e) {
return e.NotFound()
}
return false
}
func isInternal(err error) bool {
var e interface{ Internal() bool }
if errors.As(err, &e) {
return e.Internal()
}
return false
}
func isCanceled(err error) bool {
var e interface{ Canceled() bool }
if errors.As(err, &e) {
return e.Canceled()
}
return false
}
func isPreconditionFailed(err error) bool {
var e interface{ PreconditionFailed() bool }
if errors.As(err, &e) {
return e.PreconditionFailed()
}
return false
}
func isNoVice(err error) bool {
for _, v := range vices {
if Is(err, v) {
return false
}
}
return true
}