-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy patherrs.go
105 lines (88 loc) · 2.76 KB
/
errs.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
// Package errs exposes a common set of error types.
// It is designed so these errors can be declared as constants.
package errs
import "errors"
// Error interface represents an error that was built using this very package.
// Meaning it exposes a Kind() method.
type Error interface {
error
Kind() Kind
}
// Kind enum.
type Kind string
const (
KindUnauthenticated Kind = "unauthenticated"
KindInvalidArgument Kind = "invalid_argument"
KindNotFound Kind = "not_found"
KindConflict Kind = "conflict"
KindPermissionDenied Kind = "permission_denied"
KindGone Kind = "gone"
)
type UnauthenticatedError string
func (e UnauthenticatedError) Error() string { return string(e) }
func (e UnauthenticatedError) Kind() Kind { return KindUnauthenticated }
func (e UnauthenticatedError) Is(target error) bool {
var err Error
if errors.As(target, &err) {
return err.Kind() == KindUnauthenticated
}
return false
}
type InvalidArgumentError string
func (e InvalidArgumentError) Error() string { return string(e) }
func (e InvalidArgumentError) Kind() Kind { return KindInvalidArgument }
func (e InvalidArgumentError) Is(target error) bool {
var err Error
if errors.As(target, &err) {
return err.Kind() == KindInvalidArgument
}
return false
}
type NotFoundError string
func (e NotFoundError) Error() string { return string(e) }
func (e NotFoundError) Kind() Kind { return KindNotFound }
func (e NotFoundError) Is(target error) bool {
var err Error
if errors.As(target, &err) {
return err.Kind() == KindNotFound
}
return false
}
type ConflictError string
func (e ConflictError) Error() string { return string(e) }
func (e ConflictError) Kind() Kind { return KindConflict }
func (e ConflictError) Is(target error) bool {
var err Error
if errors.As(target, &err) {
return err.Kind() == KindConflict
}
return false
}
type PermissionDeniedError string
func (e PermissionDeniedError) Error() string { return string(e) }
func (e PermissionDeniedError) Kind() Kind { return KindPermissionDenied }
func (e PermissionDeniedError) Is(target error) bool {
var err Error
if errors.As(target, &err) {
return err.Kind() == KindPermissionDenied
}
return false
}
type GoneError string
func (e GoneError) Error() string { return string(e) }
func (e GoneError) Kind() Kind { return KindGone }
func (e GoneError) Is(target error) bool {
var err Error
if errors.As(target, &err) {
return err.Kind() == KindGone
}
return false
}
const (
Unauthenticated = UnauthenticatedError("unauthenticated")
InvalidArgument = InvalidArgumentError("invalid argument")
NotFound = NotFoundError("not found")
Conflict = ConflictError("conflict")
PermissionDenied = PermissionDeniedError("permission denied")
Gone = GoneError("gone")
)