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"
|
else: failure "invalid boolean value"
|
||||||
|
|
||||||
func decode(decoder: var AbiDecoder, T: type enum): ?!T =
|
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 =
|
func decode[I](decoder: var AbiDecoder, T: type array[I, byte]): ?!T =
|
||||||
var arr: T
|
var arr: T
|
||||||
|
|
|
@ -65,7 +65,12 @@ suite "ABI decoding":
|
||||||
checkDecode(one)
|
checkDecode(one)
|
||||||
checkDecode(two)
|
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":
|
test "decodes stints":
|
||||||
checkDecode(UInt128)
|
checkDecode(UInt128)
|
||||||
|
|
Loading…
Reference in New Issue