-
Notifications
You must be signed in to change notification settings - Fork 0
/
error.go
96 lines (77 loc) · 1.86 KB
/
error.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
package briar
import (
"errors"
"fmt"
)
// TransitionCode are used to describe what step of the consumer process failed.
type TransitionCode string
const (
CodeConnect TransitionCode = "connect"
CodeOpenChan TransitionCode = "channel"
CodeDeclare TransitionCode = "declare"
CodeConsume TransitionCode = "consume"
CodeDisconnected TransitionCode = "disconnected"
CodeChanClosed TransitionCode = "chan_closed"
CodeHandlerFail TransitionCode = "handler_fail"
CodeCancelled TransitionCode = "cancelled"
)
// HaltOnNthFailure is a convenience function for stopping retries after a
// number of consecutive failures.
func HaltOnNthFailure(code TransitionCode, n int) HaltFunc {
return func(c TransitionCode, count int, _ error) bool {
if c == code && count >= n {
return true
}
return false
}
}
func HaltErrorf(format string, a ...any) error {
err := fmt.Errorf(format, a...)
return &HaltError{
cause: errors.Unwrap(err),
msg: err.Error(),
}
}
type HaltError struct {
msg string
cause error
}
func (he *HaltError) Error() string {
return he.msg
}
func (he *HaltError) Unwrap() error {
return he.cause
}
type transitionError struct {
code TransitionCode
cause error
msg string
}
func (te *transitionError) Error() string {
return te.msg
}
func (te *transitionError) Unwrap() error {
return te.cause
}
func tErrorw(code TransitionCode, err error) *transitionError {
return &transitionError{
code: code,
cause: err,
msg: err.Error(),
}
}
func tErrorf(code TransitionCode, format string, a ...any) *transitionError {
err := fmt.Errorf(format, a...)
return &transitionError{
code: code,
cause: errors.Unwrap(err),
msg: err.Error(),
}
}
func NewDeadletterError() error {
return &DeadletterError{}
}
type DeadletterError struct{}
func (he *DeadletterError) Error() string {
return "deadletter message"
}