Stream


See CBOR Sequences (RFC 8742) which describes the use of streaming with CBOR.

Emitter

Indefinite-Length Array

local c = require'CBOR'

s:write(c.OPEN_ARRAY)
...
s:write(c.encode(element))
...
s:write(c.BREAK)

Indefinite-Length Map

local c = require'CBOR'

s:write(c.OPEN_MAP)
...
s:write(c.encode(key))
s:write(c.encode(value))
...
s:write(c.BREAK)

Indefinite-Length String

local c = require'CBOR'

s:write(c.OPEN_TEXT_STRING)     -- or c.OPEN_BYTE_STRING
...
s:write(c.encode(string_chunk))
...
s:write(c.BREAK)

Receiver

The function decoder accepts a compatible ltn12.source source.

A source is a function that produces data, chunk by chunk. See http://lua-users.org/wiki/FiltersSourcesAndSinks.

local c = require'CBOR'
local ltn12 = require 'ltn12'
src = ltn12.source.file(io.open('file', 'r'))
for _, v in c.decoder(src) do
    print(v)
end

-- when only one value
local _, v = c.decoder(src)()