Fail gracefully when decoding enum fails
This commit is contained in:
parent
f1d85a6d84
commit
987d6f4028
|
@ -94,7 +94,11 @@ func decode(decoder: var AbiDecoder, T: type bool): ?!T =
|
|||
else: failure "invalid boolean value"
|
||||
|
||||
func decode(decoder: var AbiDecoder, T: type enum): ?!T =
|
||||
success T(?decoder.read(uint64))
|
||||
let value = ?decoder.read(uint64)
|
||||
if value in T.low.uint64..T.high.uint64:
|
||||
success T(value)
|
||||
else:
|
||||
failure "invalid enum value"
|
||||
|
||||
func decode[I](decoder: var AbiDecoder, T: type array[I, byte]): ?!T =
|
||||
var arr: T
|
||||
|
|
|
@ -65,7 +65,12 @@ suite "ABI decoding":
|
|||
checkDecode(one)
|
||||
checkDecode(two)
|
||||
|
||||
# TODO: failure to decode when invalid enum value
|
||||
test "fails to decode enum when encountering invalid value":
|
||||
type SomeEnum = enum
|
||||
one = 1
|
||||
two = 2
|
||||
let encoded = AbiEncoder.encode(3'u8)
|
||||
check AbiDecoder.decode(encoded, SomeEnum).error.msg == "invalid enum value"
|
||||
|
||||
test "decodes stints":
|
||||
checkDecode(UInt128)
|
||||
|
|
Loading…
Reference in New Issue