diff --git a/preserves.nimble b/preserves.nimble index 1cd9d2f..7510231 100644 --- a/preserves.nimble +++ b/preserves.nimble @@ -1,6 +1,6 @@ # Package -version = "20240114" +version = "20240116" author = "Emery Hemingway" description = "data model and serialization format" license = "Unlicense" diff --git a/src/preserves/private/decoding.nim b/src/preserves/private/decoding.nim index 675ef58..f9a5be0 100644 --- a/src/preserves/private/decoding.nim +++ b/src/preserves/private/decoding.nim @@ -1,7 +1,7 @@ # SPDX-FileCopyrightText: ☭ Emery Hemingway # SPDX-License-Identifier: Unlicense -import std/[endians, streams, strutils] +import std/[endians, options, streams, strutils] import bigints import ./values @@ -163,15 +163,14 @@ proc feed*[T: byte|char](dec: var BufferedDecoder; data: openarray[T]) = if data.len > 0: dec.feed(unsafeAddr data[0], data.len) -proc decode*(dec: var BufferedDecoder): (bool, Value) = +proc decode*(dec: var BufferedDecoder): Option[Value] = ## Decode from `dec`. If decoding fails the internal position of the ## decoder does not advance. if dec.appendPosition > 0: assert(dec.decodePosition < dec.appendPosition) dec.stream.setPosition(dec.decodePosition) try: - result[1] = decodePreserves(dec.stream) - result[0] = true + result = dec.stream.decodePreserves.some dec.decodePosition = dec.stream.getPosition() if dec.decodePosition == dec.appendPosition: dec.stream.setPosition(0) diff --git a/tests/test_buffereddecoder.nim b/tests/test_buffereddecoder.nim index ae1efa7..19117d6 100644 --- a/tests/test_buffereddecoder.nim +++ b/tests/test_buffereddecoder.nim @@ -1,7 +1,7 @@ # SPDX-FileCopyrightText: 2021 ☭ Emery Hemingway # SPDX-License-Identifier: Unlicense -import std/unittest +import std/[options, unittest] import preserves suite "BufferedDecoder": @@ -10,7 +10,6 @@ suite "BufferedDecoder": var buf = newBufferedDecoder() pr = Value(kind: pkByteString, bytes: newSeq[byte](23)) - ok: bool for i, _ in pr.bytes: pr.bytes[i] = byte(i) let bin = encode(pr) @@ -19,5 +18,5 @@ suite "BufferedDecoder": let j = (i+2) and 0xf feed(buf, bin[0..