From 65c2ce45d1b38a9f5528a99faf5e987b7cb66ece Mon Sep 17 00:00:00 2001 From: Jae Kwon Date: Wed, 1 Apr 2015 14:52:10 -0700 Subject: [PATCH] add boolean reflection support --- binary/reflect.go | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/binary/reflect.go b/binary/reflect.go index 8f8a89e8..58ed9f29 100644 --- a/binary/reflect.go +++ b/binary/reflect.go @@ -337,6 +337,11 @@ func readReflect(rv reflect.Value, rt reflect.Type, r io.Reader, n *int64, err * log.Debug(Fmt("Read num: %v", num)) rv.SetUint(uint64(num)) + case reflect.Bool: + num := ReadUint8(r, n, err) + log.Debug(Fmt("Read bool: %v", num)) + rv.SetBool(num > 0) + default: panic(Fmt("Unknown field type %v", rt.Kind())) } @@ -439,6 +444,13 @@ func writeReflect(rv reflect.Value, rt reflect.Type, w io.Writer, n *int64, err case reflect.Uint: WriteUvarint(uint(rv.Uint()), w, n, err) + case reflect.Bool: + if rv.Bool() { + WriteUint8(uint8(1), w, n, err) + } else { + WriteUint8(uint8(0), w, n, err) + } + default: panic(Fmt("Unknown field type %v", rt.Kind())) } @@ -610,6 +622,15 @@ func readReflectJSON(rv reflect.Value, rt reflect.Type, o interface{}, err *erro log.Debug(Fmt("Read num: %v", num)) rv.SetUint(uint64(num)) + case reflect.Bool: + bl, ok := o.(bool) + if !ok { + *err = errors.New(Fmt("Expected boolean but got type %v", reflect.TypeOf(o))) + return + } + log.Debug(Fmt("Read boolean: %v", bl)) + rv.SetBool(bl) + default: panic(Fmt("Unknown field type %v", rt.Kind())) } @@ -694,6 +715,8 @@ func writeReflectJSON(rv reflect.Value, rt reflect.Type, w io.Writer, n *int64, case reflect.Uint64, reflect.Uint32, reflect.Uint16, reflect.Uint8, reflect.Uint: fallthrough case reflect.Int64, reflect.Int32, reflect.Int16, reflect.Int8, reflect.Int: + fallthrough + case reflect.Bool: jsonBytes, err_ := json.Marshal(rv.Interface()) if err_ != nil { *err = err_