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 }