git.gammaspectra.live/P2Pool/go-json@v0.99.0/internal/errors/error.go (about)

     1  package errors
     2  
     3  import (
     4  	"fmt"
     5  	"reflect"
     6  	"strconv"
     7  )
     8  
     9  type InvalidUTF8Error struct {
    10  	S string // the whole string value that caused the error
    11  }
    12  
    13  func (e *InvalidUTF8Error) Error() string {
    14  	return fmt.Sprintf("json: invalid UTF-8 in string: %s", strconv.Quote(e.S))
    15  }
    16  
    17  type InvalidUnmarshalError struct {
    18  	Type reflect.Type
    19  }
    20  
    21  func (e *InvalidUnmarshalError) Error() string {
    22  	if e.Type == nil {
    23  		return "json: Unmarshal(nil)"
    24  	}
    25  
    26  	if e.Type.Kind() != reflect.Ptr {
    27  		return fmt.Sprintf("json: Unmarshal(non-pointer %s)", e.Type)
    28  	}
    29  	return fmt.Sprintf("json: Unmarshal(nil %s)", e.Type)
    30  }
    31  
    32  // A MarshalerError represents an error from calling a MarshalJSON or MarshalText method.
    33  type MarshalerError struct {
    34  	Type       reflect.Type
    35  	Err        error
    36  	sourceFunc string
    37  }
    38  
    39  func (e *MarshalerError) Error() string {
    40  	srcFunc := e.sourceFunc
    41  	if srcFunc == "" {
    42  		srcFunc = "MarshalJSON"
    43  	}
    44  	return fmt.Sprintf("json: error calling %s for type %s: %s", srcFunc, e.Type, e.Err.Error())
    45  }
    46  
    47  // Unwrap returns the underlying error.
    48  func (e *MarshalerError) Unwrap() error { return e.Err }
    49  
    50  // A SyntaxError is a description of a JSON syntax error.
    51  type SyntaxError struct {
    52  	msg    string // description of error
    53  	Offset int64  // error occurred after reading Offset bytes
    54  }
    55  
    56  func (e *SyntaxError) Error() string { return e.msg }
    57  
    58  // An UnmarshalFieldError describes a JSON object key that
    59  // led to an unexported (and therefore unwritable) struct field.
    60  //
    61  // Deprecated: No longer used; kept for compatibility.
    62  type UnmarshalFieldError struct {
    63  	Key   string
    64  	Type  reflect.Type
    65  	Field reflect.StructField
    66  }
    67  
    68  func (e *UnmarshalFieldError) Error() string {
    69  	return fmt.Sprintf("json: cannot unmarshal object key %s into unexported field %s of type %s",
    70  		strconv.Quote(e.Key), e.Field.Name, e.Type.String(),
    71  	)
    72  }
    73  
    74  // An UnmarshalTypeError describes a JSON value that was
    75  // not appropriate for a value of a specific Go type.
    76  type UnmarshalTypeError struct {
    77  	Value  string       // description of JSON value - "bool", "array", "number -5"
    78  	Type   reflect.Type // type of Go value it could not be assigned to
    79  	Offset int64        // error occurred after reading Offset bytes
    80  	Struct string       // name of the struct type containing the field
    81  	Field  string       // the full path from root node to the field
    82  }
    83  
    84  func (e *UnmarshalTypeError) Error() string {
    85  	if e.Struct != "" || e.Field != "" {
    86  		return fmt.Sprintf("json: cannot unmarshal %s into Go struct field %s.%s of type %s",
    87  			e.Value, e.Struct, e.Field, e.Type,
    88  		)
    89  	}
    90  	return fmt.Sprintf("json: cannot unmarshal %s into Go value of type %s", e.Value, e.Type)
    91  }
    92  
    93  // An UnsupportedTypeError is returned by Marshal when attempting
    94  // to encode an unsupported value type.
    95  type UnsupportedTypeError struct {
    96  	Type reflect.Type
    97  }
    98  
    99  func (e *UnsupportedTypeError) Error() string {
   100  	return fmt.Sprintf("json: unsupported type: %s", e.Type)
   101  }
   102  
   103  type UnsupportedValueError struct {
   104  	Value reflect.Value
   105  	Str   string
   106  }
   107  
   108  func (e *UnsupportedValueError) Error() string {
   109  	return fmt.Sprintf("json: unsupported value: %s", e.Str)
   110  }
   111  
   112  func ErrSyntax(msg string, offset int64) *SyntaxError {
   113  	return &SyntaxError{msg: msg, Offset: offset}
   114  }
   115  
   116  func ErrMarshaler(typ reflect.Type, err error, msg string) *MarshalerError {
   117  	return &MarshalerError{
   118  		Type:       typ,
   119  		Err:        err,
   120  		sourceFunc: msg,
   121  	}
   122  }
   123  
   124  func ErrExceededMaxDepth(c byte, cursor int64) *SyntaxError {
   125  	return &SyntaxError{
   126  		msg:    fmt.Sprintf(`invalid character "%c" exceeded max depth`, c),
   127  		Offset: cursor,
   128  	}
   129  }
   130  
   131  func ErrNotAtBeginningOfValue(cursor int64) *SyntaxError {
   132  	return &SyntaxError{msg: "not at beginning of value", Offset: cursor}
   133  }
   134  
   135  func ErrUnexpectedEndOfJSON(msg string, cursor int64) *SyntaxError {
   136  	return &SyntaxError{
   137  		msg:    fmt.Sprintf("json: %s unexpected end of JSON input", msg),
   138  		Offset: cursor,
   139  	}
   140  }
   141  
   142  func ErrExpected(msg string, cursor int64) *SyntaxError {
   143  	return &SyntaxError{msg: fmt.Sprintf("expected %s", msg), Offset: cursor}
   144  }
   145  
   146  func ErrInvalidCharacter(c byte, context string, cursor int64) *SyntaxError {
   147  	if c == 0 {
   148  		return &SyntaxError{
   149  			msg:    fmt.Sprintf("json: invalid character as %s", context),
   150  			Offset: cursor,
   151  		}
   152  	}
   153  	return &SyntaxError{
   154  		msg:    fmt.Sprintf("json: invalid character %c as %s", c, context),
   155  		Offset: cursor,
   156  	}
   157  }
   158  
   159  func ErrInvalidBeginningOfValue(c byte, cursor int64) *SyntaxError {
   160  	return &SyntaxError{
   161  		msg:    fmt.Sprintf("invalid character '%c' looking for beginning of value", c),
   162  		Offset: cursor,
   163  	}
   164  }
   165  
   166  type PathError struct {
   167  	msg string
   168  }
   169  
   170  func (e *PathError) Error() string {
   171  	return fmt.Sprintf("json: invalid path format: %s", e.msg)
   172  }
   173  
   174  func ErrInvalidPath(msg string, args ...interface{}) *PathError {
   175  	if len(args) != 0 {
   176  		return &PathError{msg: fmt.Sprintf(msg, args...)}
   177  	}
   178  	return &PathError{msg: msg}
   179  }
   180  
   181  func ErrEmptyPath() *PathError {
   182  	return &PathError{msg: "path is empty"}
   183  }