9
type PollingSignalErrorType int
12
PollingSignalErrorTypeStopTrying PollingSignalErrorType = iota
13
PollingSignalErrorTypeTryAgainAfter
16
type PollingSignalError interface {
18
Wrap(err error) PollingSignalError
19
Attach(description string, obj any) PollingSignalError
23
var StopTrying = func(message string) PollingSignalError {
24
return &PollingSignalErrorImpl{
26
pollingSignalErrorType: PollingSignalErrorTypeStopTrying,
30
var TryAgainAfter = func(duration time.Duration) PollingSignalError {
31
return &PollingSignalErrorImpl{
32
message: fmt.Sprintf("told to try again after %s", duration),
34
pollingSignalErrorType: PollingSignalErrorTypeTryAgainAfter,
38
type PollingSignalErrorAttachment struct {
43
type PollingSignalErrorImpl struct {
46
pollingSignalErrorType PollingSignalErrorType
47
duration time.Duration
48
Attachments []PollingSignalErrorAttachment
51
func (s *PollingSignalErrorImpl) Wrap(err error) PollingSignalError {
56
func (s *PollingSignalErrorImpl) Attach(description string, obj any) PollingSignalError {
57
s.Attachments = append(s.Attachments, PollingSignalErrorAttachment{description, obj})
61
func (s *PollingSignalErrorImpl) Error() string {
62
if s.wrappedErr == nil {
65
return s.message + ": " + s.wrappedErr.Error()
69
func (s *PollingSignalErrorImpl) Unwrap() error {
76
func (s *PollingSignalErrorImpl) Now() {
80
func (s *PollingSignalErrorImpl) IsStopTrying() bool {
81
return s.pollingSignalErrorType == PollingSignalErrorTypeStopTrying
84
func (s *PollingSignalErrorImpl) IsTryAgainAfter() bool {
85
return s.pollingSignalErrorType == PollingSignalErrorTypeTryAgainAfter
88
func (s *PollingSignalErrorImpl) TryAgainDuration() time.Duration {
92
func AsPollingSignalError(actual interface{}) (*PollingSignalErrorImpl, bool) {
96
if actualErr, ok := actual.(error); ok {
97
var target *PollingSignalErrorImpl
98
if errors.As(actualErr, &target) {