| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 | // Copyright 2014 Manu Martinez-Almeida. All rights reserved.// Use of this source code is governed by a MIT style// license that can be found in the LICENSE file.package bindingimport (	"bytes"	"errors"	"io"	"net/http"	"github.com/gin-gonic/gin/internal/json")// EnableDecoderUseNumber is used to call the UseNumber method on the JSON// Decoder instance. UseNumber causes the Decoder to unmarshal a number into an// any as a Number instead of as a float64.var EnableDecoderUseNumber = false// EnableDecoderDisallowUnknownFields is used to call the DisallowUnknownFields method// on the JSON Decoder instance. DisallowUnknownFields causes the Decoder to// return an error when the destination is a struct and the input contains object// keys which do not match any non-ignored, exported fields in the destination.var EnableDecoderDisallowUnknownFields = falsetype jsonBinding struct{}func (jsonBinding) Name() string {	return "json"}func (jsonBinding) Bind(req *http.Request, obj any) error {	if req == nil || req.Body == nil {		return errors.New("invalid request")	}	return decodeJSON(req.Body, obj)}func (jsonBinding) BindBody(body []byte, obj any) error {	return decodeJSON(bytes.NewReader(body), obj)}func decodeJSON(r io.Reader, obj any) error {	decoder := json.NewDecoder(r)	if EnableDecoderUseNumber {		decoder.UseNumber()	}	if EnableDecoderDisallowUnknownFields {		decoder.DisallowUnknownFields()	}	if err := decoder.Decode(obj); err != nil {		return err	}	return validate(obj)}
 |