The types defined in the errdefs package do not
satisfy the `error` interface, because they do not
implement `Error()`.
Instead of returning the matched interface, return
the original error.
When matching _multiple_ interfaces/types, Golang doesn't complain:
func getImplementer(err error) error {
switch e := err.(type) {
case
ErrNotFound,
ErrInvalidParameter:
return e
default:
return err
}
}
But matching a single interface/type:
func getImplementer(err error) error {
switch e := err.(type) {
case
ErrNotFound:
return e
default:
return err
}
}
Produces an error:
cannot use e (type ErrNotFound) as type error in return argument: ErrNotFound does not implement error (missing Error method)
Return the original `err` instead of the matched interface/type instead.
Also added some additional tests
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
| ... | ... |
@@ -12,6 +12,9 @@ type causal interface {
|
| 12 | 12 |
} |
| 13 | 13 |
|
| 14 | 14 |
func TestNotFound(t *testing.T) {
|
| 15 |
+ if IsNotFound(errTest) {
|
|
| 16 |
+ t.Fatalf("did not expect not found error, got %T", errTest)
|
|
| 17 |
+ } |
|
| 15 | 18 |
e := NotFound(errTest) |
| 16 | 19 |
if !IsNotFound(e) {
|
| 17 | 20 |
t.Fatalf("expected not found error, got: %T", e)
|
| ... | ... |
@@ -22,6 +25,9 @@ func TestNotFound(t *testing.T) {
|
| 22 | 22 |
} |
| 23 | 23 |
|
| 24 | 24 |
func TestConflict(t *testing.T) {
|
| 25 |
+ if IsConflict(errTest) {
|
|
| 26 |
+ t.Fatalf("did not expect conflcit error, got %T", errTest)
|
|
| 27 |
+ } |
|
| 25 | 28 |
e := Conflict(errTest) |
| 26 | 29 |
if !IsConflict(e) {
|
| 27 | 30 |
t.Fatalf("expected conflcit error, got: %T", e)
|
| ... | ... |
@@ -32,6 +38,9 @@ func TestConflict(t *testing.T) {
|
| 32 | 32 |
} |
| 33 | 33 |
|
| 34 | 34 |
func TestForbidden(t *testing.T) {
|
| 35 |
+ if IsForbidden(errTest) {
|
|
| 36 |
+ t.Fatalf("did not expect forbidden error, got %T", errTest)
|
|
| 37 |
+ } |
|
| 35 | 38 |
e := Forbidden(errTest) |
| 36 | 39 |
if !IsForbidden(e) {
|
| 37 | 40 |
t.Fatalf("expected forbidden error, got: %T", e)
|
| ... | ... |
@@ -42,6 +51,9 @@ func TestForbidden(t *testing.T) {
|
| 42 | 42 |
} |
| 43 | 43 |
|
| 44 | 44 |
func TestInvalidParameter(t *testing.T) {
|
| 45 |
+ if IsInvalidParameter(errTest) {
|
|
| 46 |
+ t.Fatalf("did not expect invalid argument error, got %T", errTest)
|
|
| 47 |
+ } |
|
| 45 | 48 |
e := InvalidParameter(errTest) |
| 46 | 49 |
if !IsInvalidParameter(e) {
|
| 47 | 50 |
t.Fatalf("expected invalid argument error, got %T", e)
|
| ... | ... |
@@ -52,6 +64,9 @@ func TestInvalidParameter(t *testing.T) {
|
| 52 | 52 |
} |
| 53 | 53 |
|
| 54 | 54 |
func TestNotImplemented(t *testing.T) {
|
| 55 |
+ if IsNotImplemented(errTest) {
|
|
| 56 |
+ t.Fatalf("did not expect not implemented error, got %T", errTest)
|
|
| 57 |
+ } |
|
| 55 | 58 |
e := NotImplemented(errTest) |
| 56 | 59 |
if !IsNotImplemented(e) {
|
| 57 | 60 |
t.Fatalf("expected not implemented error, got %T", e)
|
| ... | ... |
@@ -62,6 +77,9 @@ func TestNotImplemented(t *testing.T) {
|
| 62 | 62 |
} |
| 63 | 63 |
|
| 64 | 64 |
func TestNotModified(t *testing.T) {
|
| 65 |
+ if IsNotModified(errTest) {
|
|
| 66 |
+ t.Fatalf("did not expect not modified error, got %T", errTest)
|
|
| 67 |
+ } |
|
| 65 | 68 |
e := NotModified(errTest) |
| 66 | 69 |
if !IsNotModified(e) {
|
| 67 | 70 |
t.Fatalf("expected not modified error, got %T", e)
|
| ... | ... |
@@ -72,6 +90,9 @@ func TestNotModified(t *testing.T) {
|
| 72 | 72 |
} |
| 73 | 73 |
|
| 74 | 74 |
func TestAlreadyExists(t *testing.T) {
|
| 75 |
+ if IsAlreadyExists(errTest) {
|
|
| 76 |
+ t.Fatalf("did not expect already exists error, got %T", errTest)
|
|
| 77 |
+ } |
|
| 75 | 78 |
e := AlreadyExists(errTest) |
| 76 | 79 |
if !IsAlreadyExists(e) {
|
| 77 | 80 |
t.Fatalf("expected already exists error, got %T", e)
|
| ... | ... |
@@ -82,6 +103,9 @@ func TestAlreadyExists(t *testing.T) {
|
| 82 | 82 |
} |
| 83 | 83 |
|
| 84 | 84 |
func TestUnauthorized(t *testing.T) {
|
| 85 |
+ if IsUnauthorized(errTest) {
|
|
| 86 |
+ t.Fatalf("did not expect unauthorized error, got %T", errTest)
|
|
| 87 |
+ } |
|
| 85 | 88 |
e := Unauthorized(errTest) |
| 86 | 89 |
if !IsUnauthorized(e) {
|
| 87 | 90 |
t.Fatalf("expected unauthorized error, got %T", e)
|
| ... | ... |
@@ -92,6 +116,9 @@ func TestUnauthorized(t *testing.T) {
|
| 92 | 92 |
} |
| 93 | 93 |
|
| 94 | 94 |
func TestUnknown(t *testing.T) {
|
| 95 |
+ if IsUnknown(errTest) {
|
|
| 96 |
+ t.Fatalf("did not expect unknown error, got %T", errTest)
|
|
| 97 |
+ } |
|
| 95 | 98 |
e := Unknown(errTest) |
| 96 | 99 |
if !IsUnknown(e) {
|
| 97 | 100 |
t.Fatalf("expected unknown error, got %T", e)
|
| ... | ... |
@@ -102,9 +129,12 @@ func TestUnknown(t *testing.T) {
|
| 102 | 102 |
} |
| 103 | 103 |
|
| 104 | 104 |
func TestCancelled(t *testing.T) {
|
| 105 |
+ if IsCancelled(errTest) {
|
|
| 106 |
+ t.Fatalf("did not expect cancelled error, got %T", errTest)
|
|
| 107 |
+ } |
|
| 105 | 108 |
e := Cancelled(errTest) |
| 106 | 109 |
if !IsCancelled(e) {
|
| 107 |
- t.Fatalf("expected canclled error, got %T", e)
|
|
| 110 |
+ t.Fatalf("expected cancelled error, got %T", e)
|
|
| 108 | 111 |
} |
| 109 | 112 |
if cause := e.(causal).Cause(); cause != errTest {
|
| 110 | 113 |
t.Fatalf("causual should be errTest, got: %v", cause)
|
| ... | ... |
@@ -112,6 +142,9 @@ func TestCancelled(t *testing.T) {
|
| 112 | 112 |
} |
| 113 | 113 |
|
| 114 | 114 |
func TestDeadline(t *testing.T) {
|
| 115 |
+ if IsDeadline(errTest) {
|
|
| 116 |
+ t.Fatalf("did not expect deadline error, got %T", errTest)
|
|
| 117 |
+ } |
|
| 115 | 118 |
e := Deadline(errTest) |
| 116 | 119 |
if !IsDeadline(e) {
|
| 117 | 120 |
t.Fatalf("expected deadline error, got %T", e)
|
| ... | ... |
@@ -121,7 +154,10 @@ func TestDeadline(t *testing.T) {
|
| 121 | 121 |
} |
| 122 | 122 |
} |
| 123 | 123 |
|
| 124 |
-func TestIsDataLoss(t *testing.T) {
|
|
| 124 |
+func TestDataLoss(t *testing.T) {
|
|
| 125 |
+ if IsDataLoss(errTest) {
|
|
| 126 |
+ t.Fatalf("did not expect data loss error, got %T", errTest)
|
|
| 127 |
+ } |
|
| 125 | 128 |
e := DataLoss(errTest) |
| 126 | 129 |
if !IsDataLoss(e) {
|
| 127 | 130 |
t.Fatalf("expected data loss error, got %T", e)
|
| ... | ... |
@@ -130,3 +166,16 @@ func TestIsDataLoss(t *testing.T) {
|
| 130 | 130 |
t.Fatalf("causual should be errTest, got: %v", cause)
|
| 131 | 131 |
} |
| 132 | 132 |
} |
| 133 |
+ |
|
| 134 |
+func TestUnavailable(t *testing.T) {
|
|
| 135 |
+ if IsUnavailable(errTest) {
|
|
| 136 |
+ t.Fatalf("did not expect unavaillable error, got %T", errTest)
|
|
| 137 |
+ } |
|
| 138 |
+ e := Unavailable(errTest) |
|
| 139 |
+ if !IsUnavailable(e) {
|
|
| 140 |
+ t.Fatalf("expected unavaillable error, got %T", e)
|
|
| 141 |
+ } |
|
| 142 |
+ if cause := e.(causal).Cause(); cause != errTest {
|
|
| 143 |
+ t.Fatalf("causual should be errTest, got: %v", cause)
|
|
| 144 |
+ } |
|
| 145 |
+} |