Skip to content

Commit

Permalink
Merge pull request #155 from Syuparn/support-errors-is-as
Browse files Browse the repository at this point in the history
feat: support errors.Is(), errors.As() in RedisError
  • Loading branch information
hjr265 committed Apr 14, 2024
2 parents 8ec4736 + 522905c commit 6b38f77
Show file tree
Hide file tree
Showing 2 changed files with 71 additions and 0 deletions.
8 changes: 8 additions & 0 deletions error.go
Original file line number Diff line number Diff line change
Expand Up @@ -44,3 +44,11 @@ type RedisError struct {
func (err RedisError) Error() string {
return fmt.Sprintf("node #%d: %s", err.Node, err.Err)
}

func (err RedisError) Is(target error) bool {
return errors.Is(err.Err, target)
}

func (err RedisError) As(target any) bool {
return errors.As(err.Err, target)
}
63 changes: 63 additions & 0 deletions error_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
package redsync

import (
"errors"
"fmt"
"testing"
)

func TestRedisErrorIs(t *testing.T) {
cases := map[string]error{
"defined_error": ErrFailed,
"other_error": errors.New("other error"),
"wrapping_error": fmt.Errorf("wrapping: %w", ErrFailed),
}

for k, v := range cases {

t.Run(k, func(t *testing.T) {
err := RedisError{
Node: 0,
Err: v,
}

if !errors.Is(err, v) {
t.Errorf("errors.Is must be true")
}
})
}
}

func TestRedisErrorAs(t *testing.T) {
derr := dummyError{}

cases := map[string]error{
"simple_error": derr,
"wrapping_error": fmt.Errorf("wrapping: %w", derr),
}

for k, v := range cases {

t.Run(k, func(t *testing.T) {
err := RedisError{
Node: 0,
Err: v,
}

var target dummyError
if !errors.As(err, &target) {
t.Errorf("errors.As must be true")
}

if target != derr {
t.Errorf("Expected target == %q, got %q", derr, target)
}
})
}
}

type dummyError struct{}

func (err dummyError) Error() string {
return "dummy"
}

0 comments on commit 6b38f77

Please sign in to comment.