From 01c11eecb0f42e7d7f40bd23478506768a753423 Mon Sep 17 00:00:00 2001 From: Mark Spanbroek Date: Wed, 13 Apr 2022 06:29:07 +0200 Subject: [PATCH] Custom encoding can use startTuple() and finishTuple() --- contractabi/decoding.nim | 11 ++--- contractabi/encoding.nim | 22 ++++----- tests/contractabi/testCustomTypes.nim | 71 ++++++++++++++++++++++----- 3 files changed, 76 insertions(+), 28 deletions(-) diff --git a/contractabi/decoding.nim b/contractabi/decoding.nim index ba4375c..7283d94 100644 --- a/contractabi/decoding.nim +++ b/contractabi/decoding.nim @@ -43,11 +43,10 @@ func index(decoder: var AbiDecoder): var int = func `index=`(decoder: var AbiDecoder, value: int) = decoder.currentTuple.index = value -func startTuple(decoder: var AbiDecoder): ?!void = +func startTuple*(decoder: var AbiDecoder) = decoder.stack.add(Tuple.init(decoder.index)) - success() -func finishTuple(decoder: var AbiDecoder) = +func finishTuple*(decoder: var AbiDecoder) = doAssert decoder.stack.len > 1, "unable to finish a tuple that hasn't started" let tupl = decoder.stack.pop() decoder.index = tupl.index @@ -134,7 +133,7 @@ func decode(decoder: var AbiDecoder, T: type seq[byte]): ?!T = func decode[T: tuple](decoder: var AbiDecoder, _: typedesc[T]): ?!T = var tupl: T - ?decoder.startTuple() + decoder.startTuple() for element in tupl.fields: element = ?decoder.read(typeof(element)) decoder.finishTuple() @@ -143,7 +142,7 @@ func decode[T: tuple](decoder: var AbiDecoder, _: typedesc[T]): ?!T = func decode[T](decoder: var AbiDecoder, _: type seq[T]): ?!seq[T] = var sequence: seq[T] let len = ?decoder.read(uint64) - ?decoder.startTuple() + decoder.startTuple() for _ in 0..