2014-06-04 01:39:50 -07:00
|
|
|
package binary
|
|
|
|
|
2014-12-09 18:49:04 -08:00
|
|
|
import (
|
2015-01-05 14:04:42 -08:00
|
|
|
"encoding/json"
|
2014-12-09 18:49:04 -08:00
|
|
|
"io"
|
|
|
|
"reflect"
|
|
|
|
)
|
2014-06-04 01:39:50 -07:00
|
|
|
|
2015-01-14 20:34:53 -08:00
|
|
|
func ReadBinary(o interface{}, r io.Reader, n *int64, err *error) interface{} {
|
2014-12-09 18:49:04 -08:00
|
|
|
rv, rt := reflect.ValueOf(o), reflect.TypeOf(o)
|
|
|
|
if rv.Kind() == reflect.Ptr {
|
|
|
|
readReflect(rv.Elem(), rt.Elem(), r, n, err)
|
|
|
|
return o
|
|
|
|
} else {
|
|
|
|
ptrRv := reflect.New(rt)
|
|
|
|
readReflect(ptrRv.Elem(), rt, r, n, err)
|
2014-12-17 01:37:13 -08:00
|
|
|
return ptrRv.Elem().Interface()
|
2014-12-09 18:49:04 -08:00
|
|
|
}
|
2014-06-05 11:45:18 -07:00
|
|
|
}
|
|
|
|
|
2014-12-09 18:49:04 -08:00
|
|
|
func WriteBinary(o interface{}, w io.Writer, n *int64, err *error) {
|
|
|
|
rv := reflect.ValueOf(o)
|
|
|
|
rt := reflect.TypeOf(o)
|
|
|
|
writeReflect(rv, rt, w, n, err)
|
2014-09-03 20:41:57 -07:00
|
|
|
}
|
|
|
|
|
2015-01-05 14:04:42 -08:00
|
|
|
func ReadJSON(o interface{}, bytes []byte, err *error) interface{} {
|
2015-03-30 15:14:33 -07:00
|
|
|
var object interface{}
|
|
|
|
*err = json.Unmarshal(bytes, &object)
|
2015-01-05 14:04:42 -08:00
|
|
|
if *err != nil {
|
|
|
|
return o
|
|
|
|
}
|
|
|
|
|
2015-03-30 15:14:33 -07:00
|
|
|
return ReadJSONFromObject(o, object, err)
|
|
|
|
}
|
|
|
|
|
|
|
|
func ReadJSONFromObject(o interface{}, object interface{}, err *error) interface{} {
|
2015-01-05 14:04:42 -08:00
|
|
|
rv, rt := reflect.ValueOf(o), reflect.TypeOf(o)
|
|
|
|
if rv.Kind() == reflect.Ptr {
|
2015-03-30 15:14:33 -07:00
|
|
|
readReflectJSON(rv.Elem(), rt.Elem(), object, err)
|
2015-01-05 14:04:42 -08:00
|
|
|
return o
|
|
|
|
} else {
|
|
|
|
ptrRv := reflect.New(rt)
|
2015-03-30 15:14:33 -07:00
|
|
|
readReflectJSON(ptrRv.Elem(), rt, object, err)
|
2015-01-05 14:04:42 -08:00
|
|
|
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)
|
|
|
|
}
|
|
|
|
|
2014-09-10 16:56:02 -07:00
|
|
|
// Write all of bz to w
|
|
|
|
// Increment n and set err accordingly.
|
2014-12-09 18:49:04 -08:00
|
|
|
func WriteTo(bz []byte, w io.Writer, n *int64, err *error) {
|
2014-09-03 19:21:19 -07:00
|
|
|
if *err != nil {
|
|
|
|
return
|
2014-07-01 14:50:24 -07:00
|
|
|
}
|
2014-09-03 19:21:19 -07:00
|
|
|
n_, err_ := w.Write(bz)
|
|
|
|
*n += int64(n_)
|
|
|
|
*err = err_
|
|
|
|
}
|
|
|
|
|
2014-09-10 16:56:02 -07:00
|
|
|
// Read len(buf) from r
|
|
|
|
// Increment n and set err accordingly.
|
2014-12-09 18:49:04 -08:00
|
|
|
func ReadFull(buf []byte, r io.Reader, n *int64, err *error) {
|
2014-09-03 19:21:19 -07:00
|
|
|
if *err != nil {
|
|
|
|
return
|
|
|
|
}
|
|
|
|
n_, err_ := io.ReadFull(r, buf)
|
|
|
|
*n += int64(n_)
|
|
|
|
*err = err_
|
2014-06-04 01:39:50 -07:00
|
|
|
}
|