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
sourceand 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
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.