Remove procs from public API

Since the introduction of the new API for encoding
and decoding of tuples, these procs are no longer
required to be on the external API.
This commit is contained in:
Mark Spanbroek 2021-12-01 12:09:42 +01:00
parent 6947bc278e
commit 319418cab7
2 changed files with 18 additions and 16 deletions

View File

@ -20,10 +20,12 @@ type
padRight padRight
UInt = SomeUnsignedInt | StUint UInt = SomeUnsignedInt | StUint
func read*(decoder: var AbiDecoder, T: type): T
func init(_: type Tuple, offset: int, dynamic: bool): Tuple = func init(_: type Tuple, offset: int, dynamic: bool): Tuple =
Tuple(start: offset, index: offset, dynamic: dynamic) Tuple(start: offset, index: offset, dynamic: dynamic)
func init*(_: type AbiDecoder, bytes: seq[byte], offset=0): AbiDecoder = func init(_: type AbiDecoder, bytes: seq[byte], offset=0): AbiDecoder =
AbiDecoder(bytes: bytes, stack: @[Tuple.init(offset, dynamic=false)]) AbiDecoder(bytes: bytes, stack: @[Tuple.init(offset, dynamic=false)])
func currentTuple(decoder: var AbiDecoder): var Tuple = func currentTuple(decoder: var AbiDecoder): var Tuple =
@ -52,19 +54,16 @@ func read(decoder: var AbiDecoder, amount: int, padding = padLeft): seq[byte] =
if padding == padRight: if padding == padRight:
decoder.advance(padlen) decoder.advance(padlen)
func read*(decoder: var AbiDecoder, T: type): T = func decode(decoder: var AbiDecoder, T: type UInt): T =
decoder.decode(T)
func decode*(decoder: var AbiDecoder, T: type UInt): T =
T.fromBytesBE(decoder.read(sizeof(T))) T.fromBytesBE(decoder.read(sizeof(T)))
func decode*(decoder: var AbiDecoder, T: type bool): T = func decode(decoder: var AbiDecoder, T: type bool): T =
decoder.read(uint8) != 0 decoder.read(uint8) != 0
func decode*(decoder: var AbiDecoder, T: type enum): T = func decode(decoder: var AbiDecoder, T: type enum): T =
T(decoder.read(uint64)) T(decoder.read(uint64))
func decode*[I](decoder: var AbiDecoder, T: type array[I, byte]): T = func decode[I](decoder: var AbiDecoder, T: type array[I, byte]): T =
result[0..<result.len] = decoder.read(result.len, padRight) result[0..<result.len] = decoder.read(result.len, padRight)
func readOffset(decoder: var AbiDecoder): int = func readOffset(decoder: var AbiDecoder): int =
@ -77,7 +76,7 @@ func readTail(decoder: var AbiDecoder, T: type seq[byte]): T =
result = tailDecoder.read(T) result = tailDecoder.read(T)
decoder.updateLast(tailDecoder.index) decoder.updateLast(tailDecoder.index)
func decode*(decoder: var AbiDecoder, T: type seq[byte]): T = func decode(decoder: var AbiDecoder, T: type seq[byte]): T =
if decoder.currentTuple.dynamic: if decoder.currentTuple.dynamic:
decoder.readTail(T) decoder.readTail(T)
else: else:
@ -98,33 +97,36 @@ func finishTuple(decoder: var AbiDecoder) =
if not tupl.dynamic: if not tupl.dynamic:
decoder.index = tupl.index decoder.index = tupl.index
func decode*(decoder: var AbiDecoder, T: type tuple): T = func decode(decoder: var AbiDecoder, T: type tuple): T =
const dynamic = AbiEncoder.isDynamic(typeof(result)) const dynamic = AbiEncoder.isDynamic(typeof(result))
decoder.startTuple(dynamic) decoder.startTuple(dynamic)
for element in result.fields: for element in result.fields:
element = decoder.read(typeof(element)) element = decoder.read(typeof(element))
decoder.finishTuple() decoder.finishTuple()
func finish*(decoder: var AbiDecoder) = func read*(decoder: var AbiDecoder, T: type): T =
decoder.decode(T)
func finish(decoder: var AbiDecoder) =
doAssert decoder.stack.len == 1, "not all tuples were finished" doAssert decoder.stack.len == 1, "not all tuples were finished"
doAssert decoder.last == decoder.bytes.len, "unread trailing bytes found" doAssert decoder.last == decoder.bytes.len, "unread trailing bytes found"
doAssert decoder.last mod 32 == 0, "encoding variant broken" doAssert decoder.last mod 32 == 0, "encoding variant broken"
func decode*[T](decoder: var AbiDecoder, _: type seq[T]): seq[T] = func decode[T](decoder: var AbiDecoder, _: type seq[T]): seq[T] =
let len = decoder.read(uint64) let len = decoder.read(uint64)
decoder.startTuple(dynamic=true) decoder.startTuple(dynamic=true)
for _ in 0..<len: for _ in 0..<len:
result.add(decoder.read(T)) result.add(decoder.read(T))
decoder.finishTuple() decoder.finishTuple()
func decode*[I,T](decoder: var AbiDecoder, _: type array[I,T]): array[I,T] = func decode[I,T](decoder: var AbiDecoder, _: type array[I,T]): array[I,T] =
const dynamic = AbiEncoder.isDynamic(T) const dynamic = AbiEncoder.isDynamic(T)
decoder.startTuple(dynamic) decoder.startTuple(dynamic)
for i in 0..<result.len: for i in 0..<result.len:
result[i] = decoder.read(T) result[i] = decoder.read(T)
decoder.finishTuple() decoder.finishTuple()
func decode*(decoder: var AbiDecoder, T: type string): T = func decode(decoder: var AbiDecoder, T: type string): T =
string.fromBytes(decoder.read(seq[byte])) string.fromBytes(decoder.read(seq[byte]))
func decode*(_: type AbiDecoder, bytes: seq[byte], T: type): T = func decode*(_: type AbiDecoder, bytes: seq[byte], T: type): T =

View File

@ -20,7 +20,7 @@ type
func write*[T](encoder: var AbiEncoder, value: T) func write*[T](encoder: var AbiEncoder, value: T)
func encode*[T](_: type AbiEncoder, value: T): seq[byte] func encode*[T](_: type AbiEncoder, value: T): seq[byte]
func init*(_: type AbiEncoder): AbiEncoder = func init(_: type AbiEncoder): AbiEncoder =
AbiEncoder(stack: @[Tuple()]) AbiEncoder(stack: @[Tuple()])
func append(tupl: var Tuple, bytes: openArray[byte]) = func append(tupl: var Tuple, bytes: openArray[byte]) =
@ -125,7 +125,7 @@ func write*[T](encoder: var AbiEncoder, value: T) =
writer.encode(value) writer.encode(value)
encoder.encode(writer.stack[0]) encoder.encode(writer.stack[0])
func finish*(encoder: var AbiEncoder): seq[byte] = func finish(encoder: var AbiEncoder): seq[byte] =
doAssert encoder.stack.len == 1, "not all tuples were finished" doAssert encoder.stack.len == 1, "not all tuples were finished"
doAssert encoder.stack[0].bytes.len mod 32 == 0, "encoding invariant broken" doAssert encoder.stack[0].bytes.len mod 32 == 0, "encoding invariant broken"
encoder.stack[0].bytes encoder.stack[0].bytes