]> Cypherpunks repositories - gostls13.git/commitdiff
encoding/json: implement Is on SyntaxError
authorCarlos Alexandro Becker <caarlos0@gmail.com>
Fri, 11 Sep 2020 22:16:47 +0000 (22:16 +0000)
committerEmmanuel Odeke <emm.odeke@gmail.com>
Sat, 12 Sep 2020 19:42:29 +0000 (19:42 +0000)
Allows users to check:

      errors.Is(err, &json.SyntaxError{})

which is the recommended way of checking for kinds of errors.

Change-Id: I20dc805f20212765e9936a82d9cb7822e73ec4ef
GitHub-Last-Rev: e2627ccf8e2a00cc3459bb9fee86c3c8675a33af
GitHub-Pull-Request: golang/go#41210
Reviewed-on: https://go-review.googlesource.com/c/go/+/253037
Reviewed-by: Emmanuel Odeke <emm.odeke@gmail.com>
Run-TryBot: Emmanuel Odeke <emm.odeke@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>

src/encoding/json/scanner.go
src/encoding/json/scanner_test.go

index 9dc1903e2db24b17d90ab90fb8de930131adb336..05218f9cc3ec5295b000278fde5f27545ee57d6a 100644 (file)
@@ -49,6 +49,12 @@ type SyntaxError struct {
 
 func (e *SyntaxError) Error() string { return e.msg }
 
+// Is returns true if target is a SyntaxError.
+func (e *SyntaxError) Is(target error) bool {
+       _, ok := target.(*SyntaxError)
+       return ok
+}
+
 // A scanner is a JSON scanning state machine.
 // Callers call scan.reset and then pass bytes in one at a time
 // by calling scan.step(&scan, c) for each byte.
index 3737516a45065caf94388a183ad6ecb06d1658d0..c12d9bf3d733f6dce9fb148c6e4d276fe4c26e0b 100644 (file)
@@ -6,6 +6,8 @@ package json
 
 import (
        "bytes"
+       "errors"
+       "fmt"
        "math"
        "math/rand"
        "reflect"
@@ -201,6 +203,13 @@ func TestIndentErrors(t *testing.T) {
        }
 }
 
+func TestSyntaxErrorIs(t *testing.T) {
+       err := fmt.Errorf("apackage: %w: failed to parse struct", &SyntaxError{"some error", 43})
+       if !errors.Is(err, &SyntaxError{}) {
+               t.Fatalf("%v should be unwrapped to a SyntaxError", err)
+       }
+}
+
 func diff(t *testing.T, a, b []byte) {
        for i := 0; ; i++ {
                if i >= len(a) || i >= len(b) || a[i] != b[i] {