diff --git a/preserves.nimble b/preserves.nimble index 0add58a..e5fab4f 100644 --- a/preserves.nimble +++ b/preserves.nimble @@ -1,6 +1,6 @@ # Package -version = "20221022" +version = "20221023" author = "Emery Hemingway" description = "data model and serialization format" license = "Unlicense" diff --git a/src/preserves.nim b/src/preserves.nim index 826c721..1a5d24a 100644 --- a/src/preserves.nim +++ b/src/preserves.nim @@ -647,10 +647,13 @@ proc newBufferedDecoder*(maxSize = 4096): BufferedDecoder = assert $pr == "" BufferedDecoder(stream: newStringStream(), maxSize: maxSize) -proc feed*[T: byte|char](dec: var BufferedDecoder; data: openarray[T]) = - if dec.maxSize < (dec.stream.getPosition + data.len): +proc feed*(dec: var BufferedDecoder; buf: pointer; len: int) = + if dec.maxSize < (dec.stream.getPosition + len): raise newException(IOError, "BufferedDecoder at maximum buffer size") - dec.stream.writeData(unsafeAddr data[0], data.len) + dec.stream.writeData(buf, len) + +proc feed*[T: byte|char](dec: var BufferedDecoder; data: openarray[T]) = + dec.feed(unsafeAddr data[0], data.len) proc decode*(dec: var BufferedDecoder; E = void): (bool, Preserve[E]) = ## Decode from `dec`. If decoding fails the internal position of the