Skip to content

Commit f85d915

Browse files
committed
fix: IsRecoverable should return false for wrapped unrecoverable
1 parent 0407c19 commit f85d915

File tree

2 files changed

+17
-1
lines changed

2 files changed

+17
-1
lines changed

retry.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -283,8 +283,13 @@ func Unrecoverable(err error) error {
283283

284284
// IsRecoverable checks if error is an instance of `unrecoverableError`
285285
func IsRecoverable(err error) bool {
286+
return !errors.Is(err, unrecoverableError{})
287+
}
288+
289+
// Adds support for errors.Is usage on unrecoverableError
290+
func (unrecoverableError) Is(err error) bool {
286291
_, isUnrecoverable := err.(unrecoverableError)
287-
return !isUnrecoverable
292+
return isUnrecoverable
288293
}
289294

290295
func unpackUnrecoverable(err error) error {

retry_test.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -503,3 +503,14 @@ func TestUnwrap(t *testing.T) {
503503
assert.Error(t, err)
504504
assert.Equal(t, testError, errors.Unwrap(err))
505505
}
506+
507+
func TestIsRecoverable(t *testing.T) {
508+
err := errors.New("err")
509+
assert.True(t, IsRecoverable(err))
510+
511+
err = Unrecoverable(err)
512+
assert.False(t, IsRecoverable(err))
513+
514+
err = fmt.Errorf("wrapping: %w", err)
515+
assert.False(t, IsRecoverable(err))
516+
}

0 commit comments

Comments
 (0)