nbrotli/decoder

Streaming incremental decoder — Phase C Simple buffered wrapper over BrotliDecompress for chunked input. Mirrors C BrotliDecoderDecompressStream semantics with feed/decodeSome.

Types

BrotliDecoder = object
  compressed*: seq[byte]
  finished*: bool
  errorCode*: int
  errorMsg*: string
  decompressed*: seq[byte]
  outputPos*: int            ## how much of decompressed already consumed via decodeSome
BrotliDecoderResult = enum
  NeedsMoreInput, NeedsMoreOutput, Success, Error

Procs

proc decodeSome(d: var BrotliDecoder; outBuf: var seq[byte]; maxOut = 65536): BrotliDecoderResult {.
    ...raises: [], tags: [], forbids: [].}
Try to decode as much as possible given current compressed buffer. Appends newly decoded bytes to outBuf (up to maxOut) and advances outputPos. Returns Success when stream finished, NeedsMoreInput when truncated, Error on format error.
proc decompressAll(d: var BrotliDecoder): seq[byte] {....raises: [], tags: [],
    forbids: [].}
Convenience: after all feed calls, return full decompressed if available.
proc decompressIncremental(data: openArray[byte]; chunkSizes: seq[int]): seq[
    byte] {....raises: [], tags: [], forbids: [].}
Helper for tests: feed data split by chunkSizes and decode incrementally. Buffered wrapper: feed all chunks then decode once.
proc errorCode(d: BrotliDecoder): int {....raises: [], tags: [], forbids: [].}
proc errorMsg(d: BrotliDecoder): string {....raises: [], tags: [], forbids: [].}
proc feed(d: var BrotliDecoder; data: openArray[byte]) {....raises: [], tags: [],
    forbids: [].}
Append chunk to internal compressed buffer. No-op if already finished/error.
proc feed(d: var BrotliDecoder; data: string) {....raises: [], tags: [],
    forbids: [].}
proc hasError(d: BrotliDecoder): bool {....raises: [], tags: [], forbids: [].}
proc initDecoder(): BrotliDecoder {....raises: [], tags: [], forbids: [].}
proc isFinished(d: BrotliDecoder): bool {....raises: [], tags: [], forbids: [].}