binary/reflect handles JSON

This commit is contained in:
Jae Kwon
2015-01-05 14:04:42 -08:00
parent 13ca6fb241
commit d4e9b747d3
6 changed files with 499 additions and 170 deletions

View File

@ -1,6 +1,7 @@
package binary
import (
"encoding/json"
"io"
"reflect"
)
@ -28,6 +29,30 @@ func WriteBinary(o interface{}, w io.Writer, n *int64, err *error) {
writeReflect(rv, rt, w, n, err)
}
func ReadJSON(o interface{}, bytes []byte, err *error) interface{} {
var parsed interface{}
*err = json.Unmarshal(bytes, &parsed)
if *err != nil {
return o
}
rv, rt := reflect.ValueOf(o), reflect.TypeOf(o)
if rv.Kind() == reflect.Ptr {
readReflectJSON(rv.Elem(), rt.Elem(), parsed, err)
return o
} else {
ptrRv := reflect.New(rt)
readReflectJSON(ptrRv.Elem(), rt, parsed, err)
return ptrRv.Elem().Interface()
}
}
func WriteJSON(o interface{}, w io.Writer, n *int64, err *error) {
rv := reflect.ValueOf(o)
rt := reflect.TypeOf(o)
writeReflectJSON(rv, rt, w, n, err)
}
// Write all of bz to w
// Increment n and set err accordingly.
func WriteTo(bz []byte, w io.Writer, n *int64, err *error) {