rlp: add support for boolean encoding/decoding
This commit is contained in:
@ -183,6 +183,8 @@ func makeDecoder(typ reflect.Type, tags tags) (dec decoder, err error) {
|
||||
return decodeBigIntNoPtr, nil
|
||||
case isUint(kind):
|
||||
return decodeUint, nil
|
||||
case kind == reflect.Bool:
|
||||
return decodeBool, nil
|
||||
case kind == reflect.String:
|
||||
return decodeString, nil
|
||||
case kind == reflect.Slice || kind == reflect.Array:
|
||||
@ -211,6 +213,15 @@ func decodeUint(s *Stream, val reflect.Value) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func decodeBool(s *Stream, val reflect.Value) error {
|
||||
b, err := s.Bool()
|
||||
if err != nil {
|
||||
return wrapStreamError(err, val.Type())
|
||||
}
|
||||
val.SetBool(b)
|
||||
return nil
|
||||
}
|
||||
|
||||
func decodeString(s *Stream, val reflect.Value) error {
|
||||
b, err := s.Bytes()
|
||||
if err != nil {
|
||||
@ -697,6 +708,24 @@ func (s *Stream) uint(maxbits int) (uint64, error) {
|
||||
}
|
||||
}
|
||||
|
||||
// Bool reads an RLP string of up to 1 byte and returns its contents
|
||||
// as an boolean. If the input does not contain an RLP string, the
|
||||
// returned error will be ErrExpectedString.
|
||||
func (s *Stream) Bool() (bool, error) {
|
||||
num, err := s.uint(8)
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
switch num {
|
||||
case 0:
|
||||
return false, nil
|
||||
case 1:
|
||||
return true, nil
|
||||
default:
|
||||
return false, fmt.Errorf("rlp: invalid boolean value: %d", num)
|
||||
}
|
||||
}
|
||||
|
||||
// List starts decoding an RLP list. If the input does not contain a
|
||||
// list, the returned error will be ErrExpectedList. When the list's
|
||||
// end has been reached, any Stream operation will return EOL.
|
||||
|
Reference in New Issue
Block a user