package json
import (
jsonv2
)
func () {
internal.TransformMarshalError = transformMarshalError
internal.TransformUnmarshalError = transformUnmarshalError
internal.NewMarshalerError = func( any, error, string) error {
return &MarshalerError{reflect.TypeOf(), , }
}
internal.NewRawNumber = func() any { return new(Number) }
internal.RawNumberOf = func( []byte) any { return Number() }
}
func ( any, error) error {
if , := .(*jsonv2.SemanticError); != nil {
if .Err == nil {
return &UnsupportedTypeError{Type: .GoType}
} else {
var reflect.Value
if , := errors.AsType[*internal.ValueError](.Err); {
= reflect.ValueOf(.Val)
}
:= .Err.Error()
if .Err == internal.ErrCycle && .GoType != nil {
+= " via " + .GoType.String()
}
= strings.TrimPrefix(, "unsupported value: ")
return &UnsupportedValueError{Value: , Str: }
}
} else if {
return (*UnsupportedValueError)(nil)
}
if , := .(*MarshalerError); != nil {
.Err = transformSyntacticError(.Err)
return
}
return transformSyntacticError()
}
func ( any, error) error {
if , := .(*jsonv2.SemanticError); != nil {
if .Err == internal.ErrNonNilReference {
return &InvalidUnmarshalError{.GoType}
}
if .Err == jsonv2.ErrUnknownName {
return fmt.Errorf("json: unknown field %q", .JSONPointer.LastToken())
}
if .Err == internal.ErrNilInterface {
.Err = nil
}
var string
switch .JSONKind {
case 'n', '"', '0':
= .JSONKind.String()
case 'f', 't':
= "bool"
case '[', ']':
= "array"
case '{', '}':
= "object"
}
if len(.JSONValue) > 0 {
:= .Err == strconv.ErrRange || .Err == strconv.ErrSyntax
:= func( reflect.Type) bool {
if == nil {
return false
}
switch .Kind() {
case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64,
reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr,
reflect.Float32, reflect.Float64:
return true
}
return false
}
if && (.GoType) {
= "number"
if .JSONKind == '"' {
.JSONValue, _ = jsontext.AppendUnquote(nil, .JSONValue)
}
.Err = nil
}
+= " " + string(.JSONValue)
}
var string
if := reflect.TypeOf(); != nil && .JSONPointer != "" {
if .Kind() == reflect.Pointer {
= .Elem()
}
= .Name()
}
:= string(.JSONPointer)
= strings.TrimPrefix(, "/")
= strings.ReplaceAll(, "/", ".")
return &UnmarshalTypeError{
Value: ,
Type: .GoType,
Offset: .ByteOffset,
Struct: ,
Field: ,
Err: transformSyntacticError(.Err),
}
} else if {
return (*UnmarshalTypeError)(nil)
}
return transformSyntacticError()
}