github.com/algorand/go-algorand-sdk@v1.24.0/encoding/json/json.go (about)

     1  package json
     2  
     3  import (
     4  	"io"
     5  
     6  	"github.com/algorand/go-codec/codec"
     7  )
     8  
     9  // CodecHandle is used to instantiate JSON encoders and decoders
    10  // with our settings (canonical, paranoid about decoding errors)
    11  var CodecHandle *codec.JsonHandle
    12  
    13  // LenientCodecHandle is used to instantiate msgpack encoders for the REST API.
    14  var LenientCodecHandle *codec.JsonHandle
    15  
    16  // init configures our json encoder and decoder
    17  func init() {
    18  	CodecHandle = new(codec.JsonHandle)
    19  	CodecHandle.ErrorIfNoField = true
    20  	CodecHandle.ErrorIfNoArrayExpand = true
    21  	CodecHandle.Canonical = true
    22  	CodecHandle.RecursiveEmptyCheck = true
    23  	CodecHandle.Indent = 2
    24  	CodecHandle.HTMLCharsAsIs = true
    25  
    26  	LenientCodecHandle = new(codec.JsonHandle)
    27  	LenientCodecHandle.ErrorIfNoField = false
    28  	LenientCodecHandle.ErrorIfNoArrayExpand = true
    29  	LenientCodecHandle.Canonical = true
    30  	LenientCodecHandle.RecursiveEmptyCheck = true
    31  	LenientCodecHandle.Indent = 2
    32  	LenientCodecHandle.HTMLCharsAsIs = true
    33  }
    34  
    35  // Encode returns a json-encoded byte buffer for a given object
    36  func Encode(obj interface{}) []byte {
    37  	var b []byte
    38  	enc := codec.NewEncoderBytes(&b, CodecHandle)
    39  	enc.MustEncode(obj)
    40  	return b
    41  }
    42  
    43  // Decode attempts to decode a json-encoded byte buffer into an
    44  // object instance pointed to by objptr
    45  func Decode(b []byte, objptr interface{}) error {
    46  	dec := codec.NewDecoderBytes(b, CodecHandle)
    47  	err := dec.Decode(objptr)
    48  	if err != nil {
    49  		return err
    50  	}
    51  	return nil
    52  }
    53  
    54  // LenientDecode attempts to decode a json-encoded byte buffer into an
    55  // object instance pointed to by objptr
    56  func LenientDecode(b []byte, objptr interface{}) error {
    57  	dec := codec.NewDecoderBytes(b, LenientCodecHandle)
    58  	err := dec.Decode(objptr)
    59  	if err != nil {
    60  		return err
    61  	}
    62  	return nil
    63  }
    64  
    65  // NewDecoder returns a json decoder
    66  func NewDecoder(r io.Reader) *codec.Decoder {
    67  	return codec.NewDecoder(r, CodecHandle)
    68  }
    69  
    70  // NewLenientDecoder returns a json decoder
    71  func NewLenientDecoder(r io.Reader) *codec.Decoder {
    72  	return codec.NewDecoder(r, LenientCodecHandle)
    73  }