github.com/diamondburned/arikawa/v2@v2.1.0/utils/json/json.go (about)

     1  // Package json allows for different implementations of JSON serializing, as
     2  // well as extra optional types needed.
     3  package json
     4  
     5  import (
     6  	"encoding/json"
     7  	"io"
     8  )
     9  
    10  type Driver interface {
    11  	Marshal(v interface{}) ([]byte, error)
    12  	Unmarshal(data []byte, v interface{}) error
    13  
    14  	DecodeStream(r io.Reader, v interface{}) error
    15  	EncodeStream(w io.Writer, v interface{}) error
    16  }
    17  
    18  type DefaultDriver struct{}
    19  
    20  func (d DefaultDriver) Marshal(v interface{}) ([]byte, error) {
    21  	return json.Marshal(v)
    22  }
    23  
    24  func (d DefaultDriver) Unmarshal(data []byte, v interface{}) error {
    25  	return json.Unmarshal(data, v)
    26  }
    27  
    28  func (d DefaultDriver) DecodeStream(r io.Reader, v interface{}) error {
    29  	return json.NewDecoder(r).Decode(v)
    30  }
    31  
    32  func (d DefaultDriver) EncodeStream(w io.Writer, v interface{}) error {
    33  	return json.NewEncoder(w).Encode(v)
    34  }
    35  
    36  // Default is the default JSON driver, which uses encoding/json.
    37  var Default Driver = DefaultDriver{}
    38  
    39  // Marshal uses the default driver.
    40  func Marshal(v interface{}) ([]byte, error) {
    41  	return Default.Marshal(v)
    42  }
    43  
    44  // Unmarshal uses the default driver.
    45  func Unmarshal(data []byte, v interface{}) error {
    46  	return Default.Unmarshal(data, v)
    47  }
    48  
    49  // DecodeStream uses the default driver.
    50  func DecodeStream(r io.Reader, v interface{}) error {
    51  	return Default.DecodeStream(r, v)
    52  }
    53  
    54  // EncodeStream uses the default driver.
    55  func EncodeStream(w io.Writer, v interface{}) error {
    56  	return Default.EncodeStream(w, v)
    57  }