-
-
Notifications
You must be signed in to change notification settings - Fork 67
/
reserr.go
80 lines (73 loc) · 3.39 KB
/
reserr.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
package reserr
// Error represents a RES error
type Error struct {
Code string `json:"code"`
Message string `json:"message"`
Data interface{} `json:"data,omitempty"`
}
func (e *Error) Error() string {
return e.Message
}
// RESError converts an error to an *Error. If it isn't of type *Error already, it will become a system.internalError.
func RESError(err error) *Error {
rerr, ok := err.(*Error)
if !ok {
rerr = InternalError(err)
}
return rerr
}
// InternalError converts an error to an *Error with the code system.internalError.
func InternalError(err error) *Error {
return &Error{Code: CodeInternalError, Message: "Internal error: " + err.Error()}
}
// IsError returns true if the error is an Error with the given error code.
func IsError(err error, code string) bool {
rerr, ok := err.(*Error)
if !ok {
return false
}
return rerr.Code == code
}
// Pre-defined RES error codes
const (
CodeAccessDenied = "system.accessDenied"
CodeInternalError = "system.internalError"
CodeInvalidParams = "system.invalidParams"
CodeInvalidQuery = "system.invalidQuery"
CodeMethodNotFound = "system.methodNotFound"
CodeNoSubscription = "system.noSubscription"
CodeNotFound = "system.notFound"
CodeTimeout = "system.timeout"
CodeInvalidRequest = "system.invalidRequest"
CodeUnsupportedProtocol = "system.unsupportedProtocol"
CodeSubjectTooLong = "system.subjectTooLong"
CodeDeleted = "system.deleted"
// HTTP only error codes
CodeBadRequest = "system.badRequest"
CodeMethodNotAllowed = "system.methodNotAllowed"
CodeServiceUnavailable = "system.serviceUnavailable"
CodeForbidden = "system.forbidden"
)
// Pre-defined RES errors
// https://github.com/resgateio/resgate/blob/master/docs/res-service-protocol.md#pre-defined-errors
// https://github.com/resgateio/resgate/blob/master/docs/res-client-protocol.md#pre-defined-errors
var (
ErrAccessDenied = &Error{Code: CodeAccessDenied, Message: "Access denied"}
ErrDisposing = &Error{Code: CodeInternalError, Message: "Internal error: disposing connection"}
ErrInternalError = &Error{Code: CodeInternalError, Message: "Internal error"}
ErrInvalidParams = &Error{Code: CodeInvalidParams, Message: "Invalid parameters"}
ErrInvalidQuery = &Error{Code: CodeInvalidQuery, Message: "Invalid query"}
ErrMethodNotFound = &Error{Code: CodeMethodNotFound, Message: "Method not found"}
ErrNoSubscription = &Error{Code: CodeNoSubscription, Message: "No subscription"}
ErrNotFound = &Error{Code: CodeNotFound, Message: "Not found"}
ErrTimeout = &Error{Code: CodeTimeout, Message: "Request timeout"}
ErrInvalidRequest = &Error{Code: CodeInvalidRequest, Message: "Invalid request"}
ErrUnsupportedProtocol = &Error{Code: CodeUnsupportedProtocol, Message: "Unsupported protocol"}
ErrSubjectTooLong = &Error{Code: CodeSubjectTooLong, Message: "Subject too long"}
ErrDeleted = &Error{Code: CodeDeleted, Message: "Deleted"}
// HTTP only errors
ErrBadRequest = &Error{Code: CodeBadRequest, Message: "Bad request"}
ErrMethodNotAllowed = &Error{Code: CodeMethodNotAllowed, Message: "Method not allowed"}
ErrServiceUnavailable = &Error{Code: CodeServiceUnavailable, Message: "Service unavailable"}
ErrForbiddenOrigin = &Error{Code: CodeForbidden, Message: "Forbidden origin"}
)