template<typename KEYTYPE = const char*, unsigned SIZE = SATCAT5_QCBOR_BUFFER>
class satcat5::cbor::MapReaderStatic< KEYTYPE, SIZE >
MapReader variant with a statically-allocated buffer.
Most users should instantiate this instead of MapReader. Optional template parameter specifies buffer size.
Reads a series of key-value pairs from a CBOR Map. A common CBOR use case is to have a single Map at the top level with several keys of the same type (string, uint, etc.). This class assumes this CBOR payload structure and provides readers for these, templated by supported QCBOR key types. Most return their value wrapped by util::optional<> to indicate whether the value was found in the Map. This silently clears errors with the code QCBOR_ERR_LABEL_NOT_FOUND to allow trivial recovery from this class of decoder errors. Array reading functions can have more complex errors and therefore have their own return codes defined. A template parameter is provided for the key type to be written to the map - QCBOR currently only supports usage of string (const char*) and integer (s64) keys.
- See also
- satcat5::cbor::MapReaderStatic
Creates an ephemeral reader for the Concise Binary Object Representation (CBOR, IETF RFC8949), holding underlying objects and providing more concise member functions. This reader wraps the QCBOR library into a more familiar interface that performs stack buffer allocation and io::Readable handling automatically. QCBOR decode requires a working buffer to hold the in-progress object, which should be allocated by a child class, typically cbor::ListReaderStatic or cbor::MapReaderStatic.
Most users should be able to hit target functionality with usage of cbor::ListReader cbor::MapReader or other future wrappers. However, the QCBOR decode context cbor is a public member variable that may be used for calls to QCBORDecode_* functions for complex use-cases outside the scope of provided wrapper classes.
Usage:
- Create a CborReader object, which copies from any io::Readable sink and calls read_finalize(). If no io::Readable is passed, the given buffer is assumed to be populated with a CBOR payload.
- Use member functions of a child class such as cbor::ListReader or cbor::MapReader to read a valid CBOR list or map, respectively.
- For any edge cases, use
QCBORDecode_* functions with the given QCBOR context cbor.
Most users should instantiate ListReaderStatic or MapReaderStatic instead of this to perform all stack buffer allocation.
- See also
- satcat5::cbor::ListReader, satcat5::cbor::MapReader
Definition at line 814 of file io_cbor.h.
|
| | MapReaderStatic (satcat5::io::Readable *src) |
| | Create this object and copy from a source io::Readable. More...
|
| |
|
optional< bool > | get_bool (s64 key) const |
| |
|
optional< bool > | get_bool (const char *key) const |
| |
|
optional< s64 > | get_int (s64 key) const |
| |
|
optional< s64 > | get_int (const char *key) const |
| |
|
optional< u64 > | get_uint (s64 key) const |
| |
|
optional< u64 > | get_uint (const char *key) const |
| |
|
optional< double > | get_double (s64 key) const |
| |
|
optional< double > | get_double (const char *key) const |
| |
|
bool | is_null (const char * key) const |
| | Check if a key in the Map exists and is NULL.
|
| |
|
bool | is_null (s64 key) const |
| |
|
bool | is_null (const char *key) const |
| |
| satcat5::util::optional< satcat5::io::ArrayRead > | get_string (const char * key) const |
| | Read a string from the Map. More...
|
| |
|
optional< ArrayRead > | get_string (s64 key) const |
| |
|
optional< ArrayRead > | get_string (const char *key) const |
| |
| satcat5::util::optional< satcat5::io::ArrayRead > | get_bytes (const char * key) const |
| | Read a byte sequence from the Map. More...
|
| |
|
optional< ArrayRead > | get_bytes (s64 key) const |
| |
|
optional< ArrayRead > | get_bytes (const char *key) const |
| |
| QCBORDecodeContext * | open_list (const char * key) const |
| | Read a nested list from the Map. More...
|
| |
|
QCBORDecodeContext * | open_list (s64 key) const |
| |
|
QCBORDecodeContext * | open_list (const char *key) const |
| |
| QCBORDecodeContext * | open_map (const char * key) const |
| | Read a nested dictionary from the Map. More...
|
| |
|
QCBORDecodeContext * | open_map (s64 key) const |
| |
|
QCBORDecodeContext * | open_map (const char *key) const |
| |
|
int | get_bool_array (s64 key, Writeable &dst) const |
| |
|
int | get_bool_array (const char *key, Writeable &dst) const |
| |
|
int | get_s64_array (s64 key, Writeable &dst) const |
| |
|
int | get_s64_array (const char *key, Writeable &dst) const |
| |
|
int | get_double_array (s64 key, Writeable &dst) const |
| |
|
int | get_double_array (const char *key, Writeable &dst) const |
| |
|
bool | ok () const |
| | Check if any errors have been encountered yet during decoding.
|
| |
|
QCBORError | get_error () const |
| | Get the QCBOR decoding error, if any.
|
| |
| void | close_list () const |
| | Resume parsing at the end of a nested list. More...
|
| |
| void | close_map () const |
| | Resume parsing at the end of a nested dictionary. More...
|
| |
| bool | copy_item (QCBOREncodeContext *dst) |
| | Copy the next CBOR item to the specified destination. More...
|
| |
| unsigned | copy_all (QCBOREncodeContext *dst) |
| | Copy all remaining CBOR item(s) to the specified destination. More...
|
| |
|
|
satcat5::util::optional< bool > | get_bool (const char * key) const |
| | Read a scalar value from the Map.
|
| |
|
satcat5::util::optional< s64 > | get_int (const char * key) const |
| | Read a scalar value from the Map.
|
| |
|
satcat5::util::optional< u64 > | get_uint (const char * key) const |
| | Read a scalar value from the Map.
|
| |
|
satcat5::util::optional< double > | get_double (const char * key) const |
| | Read a scalar value from the Map.
|
| |
|
| int | get_bool_array (const char * key, satcat5::io::Writeable &dst) const |
| | Read an array of boolean values from the Map, always written as u8 values regardless of platform sizeof(bool). More...
|
| |
| int | get_bool_array (const char * key, u8 *arr, unsigned arr_len) const |
| | Read an array of boolean values from the Map, always written as u8 values regardless of platform sizeof(bool). More...
|
| |
|
| int | get_s64_array (const char * key, satcat5::io::Writeable &dst) const |
| | Read an array of integer values from the Map, always written as 64-bit length signed values (s64) to cover any size in the Map. More...
|
| |
| int | get_s64_array (const char * key, s64 *arr, unsigned arr_len) const |
| | Read an array of integer values from the Map, always written as 64-bit length signed values (s64) to cover any size in the Map. More...
|
| |
|
| int | get_double_array (const char * key, satcat5::io::Writeable &dst) const |
| | Read an array of floating-point values from the Map, always written as doubles to cover any precision in the Map. More...
|
| |
| int | get_double_array (const char * key, double *arr, unsigned arr_len) const |
| | Read an array of floating-point values from the Map, always written as doubles to cover any precision in the Map. More...
|
| |