Reading CBOR#
Overview#
#include <minicbor.h>
static minicbor_reader_fns Callbacks = {
.PositiveFn = ...,
.NegativeFn = ...,
...
.ErrorFn = ...
};
void example_read() {
minicbor_reader_t Reader;
Reader.Callbacks = Callbacks;
Reader.UserData = ...;
// Initialize Reader
minicbor_reader_init(&Reader);
// Parse each block
unsigned char Bytes[256];
for (;;) {
int Count = read(Stream, Bytes, 256);
if (Count <= 0) break;
minicbor_read(&Reader, Bytes, Size);
}
}
Defines#
-
CBOR_SIMPLE_FALSE#
Simple false value.
-
CBOR_SIMPLE_TRUE#
Simple true value.
-
CBOR_SIMPLE_NULL#
Simple null value.
-
CBOR_SIMPLE_UNDEF#
Simple undefined value.
Types#
- struct minicbor_reader_t
A reader for a CBOR stream. Must be initialized with
minicbor_reader_init()
before each use.-
minicbor_reader_fns *Callbacks#
-
minicbor_readdata_t UserData#
-
minicbor_reader_fns *Callbacks#
- struct minicbor_reader_fns
-
void (*PositiveFn)(void *UserData, uint64_t Number)#
Called when a positive integer is encountered.
-
void (*NegativeFn)(void *UserData, uint64_t Number)#
Called when a negative integer is encountered.
-
void (*BytesFn)(void *UserData, int Size)#
Called when a bytestring is encountered.
Size
is nonnegative for definite bytestrings and-1
for indefinite strings. For definite empty bytestrings,Size
is0
andBytesPieceFn()
is not called. Otherwise,BytesPieceFn()
will be called one or more times, with the last call havingFinal
set to1
.
-
void (*BytesPieceFn)(void *UserData, void *Bytes, int Size, int Final)#
Called for each piece of a bytestring. Note that pieces here do not correspond to CBOR chunks: there may be more pieces than chunks due to streaming.
-
void (*StringFn)(void *UserData, int Size)#
Called when a string is encountered.
Size
is nonnegative for definite strings and-1
for indefinite strings. For definite empty strings,Size
is0
andStringPieceFn()
is not called. Otherwise,StringPieceFn()
will be called one or more times, with the last call havingFinal
set to1
.
-
void (*StringPieceFn)(void *UserData, void *Bytes, int Size, int Final)#
Called for each piece of a string. Note that pieces here do not correspond to CBOR chunks: there may be more pieces than chunks due to streaming.
-
void (*ArrayFn)(void *UserData, int Size)#
Called when an array is encountered.
Size
is nonnegative for definite array and-1
for indefinite arrays.
-
void (*MapFn)(void *UserData, int Size)#
Called when an map is encountered.
Size
is nonnegative for definite map and-1
for indefinite maps.
-
void (*TagFn)(void *UserData, uint64_t Tag)#
Called when a tag is encountered.
-
void (*SimpleFn)(void *UserData, int Value)#
Called when a simple value is encounted.
-
void (*FloatFn)(void *UserData, double Number)#
Called when a floating point number is encountered.
-
void (*BreakFn)(void *UserData)#
Called when a break is encountered. This is not called for breaks at the end of an indefinite bytestring or string, instead
Final
is set to1
in the corresponding piece callback.-
void (*PositiveFn)(void *UserData, uint64_t Number)#
Functions#
-
void minicbor_reader_init(minicbor_reader_t *Reader)#
Initializes
Reader
for decoding a new CBOR stream. Must be called before any call tominicbor_read()
. Aminicbor_reader_t
can be reused by calling this function again.
-
int minicbor_read(minicbor_reader_t *Reader, unsigned char *Bytes, unsigned Size)#
Parse some CBOR bytes and call the appropriate callbacks. Returns the 1 if
minicbor_reader_finish()
was called within a callback, otherwise returns 0.
-
void minicbor_reader_finish(minicbor_reader_t *Reader)#
Set
Reader
state toMCS_FINISHED
. Must be called from within a reader callback.
-
int minicbor_reader_remaining(minicbor_reader_t *Reader)#
Returns the number of bytes remainining to be parsed by the reader.