package errors

import (
	
	
	
)

type InvalidUTF8Error struct {
	S string // the whole string value that caused the error
}

func ( *InvalidUTF8Error) () string {
	return fmt.Sprintf("json: invalid UTF-8 in string: %s", strconv.Quote(.S))
}

type InvalidUnmarshalError struct {
	Type reflect.Type
}

func ( *InvalidUnmarshalError) () string {
	if .Type == nil {
		return "json: Unmarshal(nil)"
	}

	if .Type.Kind() != reflect.Ptr {
		return fmt.Sprintf("json: Unmarshal(non-pointer %s)", .Type)
	}
	return fmt.Sprintf("json: Unmarshal(nil %s)", .Type)
}

// A MarshalerError represents an error from calling a MarshalJSON or MarshalText method.
type MarshalerError struct {
	Type       reflect.Type
	Err        error
	sourceFunc string
}

func ( *MarshalerError) () string {
	 := .sourceFunc
	if  == "" {
		 = "MarshalJSON"
	}
	return fmt.Sprintf("json: error calling %s for type %s: %s", , .Type, .Err.Error())
}

// Unwrap returns the underlying error.
func ( *MarshalerError) () error { return .Err }

// A SyntaxError is a description of a JSON syntax error.
type SyntaxError struct {
	msg    string // description of error
	Offset int64  // error occurred after reading Offset bytes
}

func ( *SyntaxError) () string { return .msg }

// An UnmarshalFieldError describes a JSON object key that
// led to an unexported (and therefore unwritable) struct field.
//
// Deprecated: No longer used; kept for compatibility.
type UnmarshalFieldError struct {
	Key   string
	Type  reflect.Type
	Field reflect.StructField
}

func ( *UnmarshalFieldError) () string {
	return fmt.Sprintf("json: cannot unmarshal object key %s into unexported field %s of type %s",
		strconv.Quote(.Key), .Field.Name, .Type.String(),
	)
}

// An UnmarshalTypeError describes a JSON value that was
// not appropriate for a value of a specific Go type.
type UnmarshalTypeError struct {
	Value  string       // description of JSON value - "bool", "array", "number -5"
	Type   reflect.Type // type of Go value it could not be assigned to
	Offset int64        // error occurred after reading Offset bytes
	Struct string       // name of the struct type containing the field
	Field  string       // the full path from root node to the field
}

func ( *UnmarshalTypeError) () string {
	if .Struct != "" || .Field != "" {
		return fmt.Sprintf("json: cannot unmarshal %s into Go struct field %s.%s of type %s",
			.Value, .Struct, .Field, .Type,
		)
	}
	return fmt.Sprintf("json: cannot unmarshal %s into Go value of type %s", .Value, .Type)
}

// An UnsupportedTypeError is returned by Marshal when attempting
// to encode an unsupported value type.
type UnsupportedTypeError struct {
	Type reflect.Type
}

func ( *UnsupportedTypeError) () string {
	return fmt.Sprintf("json: unsupported type: %s", .Type)
}

type UnsupportedValueError struct {
	Value reflect.Value
	Str   string
}

func ( *UnsupportedValueError) () string {
	return fmt.Sprintf("json: unsupported value: %s", .Str)
}

func ( string,  int64) *SyntaxError {
	return &SyntaxError{msg: , Offset: }
}

func ( reflect.Type,  error,  string) *MarshalerError {
	return &MarshalerError{
		Type:       ,
		Err:        ,
		sourceFunc: ,
	}
}

func ( byte,  int64) *SyntaxError {
	return &SyntaxError{
		msg:    fmt.Sprintf(`invalid character "%c" exceeded max depth`, ),
		Offset: ,
	}
}

func ( int64) *SyntaxError {
	return &SyntaxError{msg: "not at beginning of value", Offset: }
}

func ( string,  int64) *SyntaxError {
	return &SyntaxError{
		msg:    fmt.Sprintf("json: %s unexpected end of JSON input", ),
		Offset: ,
	}
}

func ( string,  int64) *SyntaxError {
	return &SyntaxError{msg: fmt.Sprintf("expected %s", ), Offset: }
}

func ( byte,  string,  int64) *SyntaxError {
	if  == 0 {
		return &SyntaxError{
			msg:    fmt.Sprintf("json: invalid character as %s", ),
			Offset: ,
		}
	}
	return &SyntaxError{
		msg:    fmt.Sprintf("json: invalid character %c as %s", , ),
		Offset: ,
	}
}

func ( byte,  int64) *SyntaxError {
	return &SyntaxError{
		msg:    fmt.Sprintf("invalid character '%c' looking for beginning of value", ),
		Offset: ,
	}
}

type PathError struct {
	msg string
}

func ( *PathError) () string {
	return fmt.Sprintf("json: invalid path format: %s", .msg)
}

func ( string,  ...interface{}) *PathError {
	if len() != 0 {
		return &PathError{msg: fmt.Sprintf(, ...)}
	}
	return &PathError{msg: }
}

func () *PathError {
	return &PathError{msg: "path is empty"}
}