BufferedDecoder: return Option[Value] from decode
This commit is contained in:
parent
aa5c7f4683
commit
ba0857c32b
|
@ -1,6 +1,6 @@
|
|||
# Package
|
||||
|
||||
version = "20240114"
|
||||
version = "20240116"
|
||||
author = "Emery Hemingway"
|
||||
description = "data model and serialization format"
|
||||
license = "Unlicense"
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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..<j])
|
||||
feed(buf, bin[j..bin.high])
|
||||
(ok, pr) = decode(buf)
|
||||
assert ok
|
||||
var v = decode(buf)
|
||||
check v.isSome
|
||||
|
|
Loading…
Reference in New Issue