From 95bb00d1088767ed14e3bd1a5f533a690d619a5f Mon Sep 17 00:00:00 2001 From: Carlos Alexandro Becker Date: Sun, 13 Sep 2020 02:12:02 +0000 Subject: encoding/json: implement Is on all errors Allows users to check: errors.Is(err, &UnmarshalTypeError{}) errors.Is(err, &UnmarshalFieldError{}) errors.Is(err, &InvalidUnmarshalError{}) errors.Is(err, &UnsupportedValueError{}) errors.Is(err, &MarshalerError{}) which is the recommended way of checking for kinds of errors. SyntaxError.Is was implemented in CL 253037. As and Unwrap relevant methods will be added in future CLs. Change-Id: I1f8a503b8fdc0f3afdfe9669a91f3af8d960e028 GitHub-Last-Rev: 930cda5384c987a0b31f277ba3b4ab690ea74ac3 GitHub-Pull-Request: golang/go#41360 Reviewed-on: https://go-review.googlesource.com/c/go/+/254537 Run-TryBot: Emmanuel Odeke TryBot-Result: Gobot Gobot Reviewed-by: Emmanuel Odeke Trust: Emmanuel Odeke --- src/encoding/json/encode.go | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'src/encoding/json/encode.go') diff --git a/src/encoding/json/encode.go b/src/encoding/json/encode.go index 578d551102..8e6b342b59 100644 --- a/src/encoding/json/encode.go +++ b/src/encoding/json/encode.go @@ -245,6 +245,12 @@ func (e *UnsupportedValueError) Error() string { return "json: unsupported value: " + e.Str } +// Is returns true if target is a UnsupportedValueError. +func (e *UnsupportedValueError) Is(target error) bool { + _, ok := target.(*UnsupportedValueError) + return ok +} + // Before Go 1.2, an InvalidUTF8Error was returned by Marshal when // attempting to encode a string value with invalid UTF-8 sequences. // As of Go 1.2, Marshal instead coerces the string to valid UTF-8 by @@ -279,6 +285,12 @@ func (e *MarshalerError) Error() string { // Unwrap returns the underlying error. func (e *MarshalerError) Unwrap() error { return e.Err } +// Is returns true if target is a MarshalerError. +func (e *MarshalerError) Is(target error) bool { + _, ok := target.(*MarshalerError) + return ok +} + var hex = "0123456789abcdef" // An encodeState encodes JSON into a bytes.Buffer. -- cgit v1.3