mirror of
https://github.com/golang/go
synced 2024-11-27 02:11:17 -07:00
encoding/json: implement Is on SyntaxError
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: e2627ccf8e
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>
This commit is contained in:
parent
92b2b8860d
commit
b3ef90ec73
@ -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.
|
||||
|
@ -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] {
|
||||
|
Loading…
Reference in New Issue
Block a user