Streaming Decoding¶
libcbor exposes a stateless decoder that reads a stream of input bytes from a buffer and invokes user-provided callbacks as it decodes the input:
-
struct cbor_decoder_result cbor_stream_decode(cbor_data source, size_t source_size, const struct cbor_callbacks *callbacks, void *context)¶
Stateless decoder.
Will try parsing the
source
and will invoke the appropriate callback on success. Decodes one item at a time. No memory allocations occur.- param source
Input buffer
- param source_size
Length of the buffer
- param callbacks
The callback bundle
- param context
An arbitrary pointer to allow for maintaining context.
For example, when cbor_stream_decode()
encounters a 1B unsigned integer, it will invoke the function pointer stored in cbor_callbacks.uint8
.
Complete usage example: examples/streaming_parser.c
The callbacks are defined by
-
struct cbor_callbacks¶
Callback bundle — passed to the decoder.
Public Members
-
cbor_int8_callback uint8¶
Unsigned int.
-
cbor_int16_callback uint16¶
Unsigned int.
-
cbor_int32_callback uint32¶
Unsigned int.
-
cbor_int64_callback uint64¶
Unsigned int.
-
cbor_int64_callback negint64¶
Negative int.
-
cbor_int32_callback negint32¶
Negative int.
-
cbor_int16_callback negint16¶
Negative int.
-
cbor_int8_callback negint8¶
Negative int.
-
cbor_simple_callback byte_string_start¶
Definite byte string.
-
cbor_string_callback byte_string¶
Indefinite byte string start.
-
cbor_string_callback string¶
Definite string.
-
cbor_simple_callback string_start¶
Indefinite string start.
-
cbor_simple_callback indef_array_start¶
Definite array.
-
cbor_collection_callback array_start¶
Indefinite array.
-
cbor_simple_callback indef_map_start¶
Definite map.
-
cbor_collection_callback map_start¶
Indefinite map.
-
cbor_int64_callback tag¶
Tags.
-
cbor_float_callback float2¶
Half float.
-
cbor_float_callback float4¶
Single float.
-
cbor_double_callback float8¶
Double float.
-
cbor_simple_callback undefined¶
Undef.
-
cbor_simple_callback null¶
Null.
-
cbor_bool_callback boolean¶
Bool.
-
cbor_simple_callback indef_break¶
Indefinite item break.
-
cbor_int8_callback uint8¶
When building custom sets of callbacks, feel free to start from
-
const struct cbor_callbacks cbor_empty_callbacks¶
Dummy callback bundle - does nothing.
Callback types definition¶
-
typedef void (*cbor_int8_callback)(void*, uint8_t)¶
Callback prototype.
-
typedef void (*cbor_int16_callback)(void*, uint16_t)¶
Callback prototype.
-
typedef void (*cbor_int32_callback)(void*, uint32_t)¶
Callback prototype.
-
typedef void (*cbor_int64_callback)(void*, uint64_t)¶
Callback prototype.
-
typedef void (*cbor_simple_callback)(void*)¶
Callback prototype.
-
typedef void (*cbor_string_callback)(void*, cbor_data, uint64_t)¶
Callback prototype.
-
typedef void (*cbor_collection_callback)(void*, uint64_t)¶
Callback prototype.
-
typedef void (*cbor_float_callback)(void*, float)¶
Callback prototype.
-
typedef void (*cbor_double_callback)(void*, double)¶
Callback prototype.
-
typedef void (*cbor_bool_callback)(void*, bool)¶
Callback prototype.