1/* 2 * Copyright (c) 2014-2020 Pavel Kalvoda <me@pavelkalvoda.com> 3 * 4 * libcbor is free software; you can redistribute it and/or modify 5 * it under the terms of the MIT license. See LICENSE for details. 6 */ 7 8#ifndef LIBCBOR_CALLBACKS_H 9#define LIBCBOR_CALLBACKS_H 10 11#include <stdint.h> 12 13#include "cbor/cbor_export.h" 14#include "cbor/common.h" 15 16#ifdef __cplusplus 17extern "C" { 18#endif 19 20/** Callback prototype */ 21typedef void (*cbor_int8_callback)(void *, uint8_t); 22 23/** Callback prototype */ 24typedef void (*cbor_int16_callback)(void *, uint16_t); 25 26/** Callback prototype */ 27typedef void (*cbor_int32_callback)(void *, uint32_t); 28 29/** Callback prototype */ 30typedef void (*cbor_int64_callback)(void *, uint64_t); 31 32/** Callback prototype */ 33typedef void (*cbor_simple_callback)(void *); 34 35/** Callback prototype */ 36typedef void (*cbor_string_callback)(void *, cbor_data, uint64_t); 37 38/** Callback prototype */ 39typedef void (*cbor_collection_callback)(void *, uint64_t); 40 41/** Callback prototype */ 42typedef void (*cbor_float_callback)(void *, float); 43 44/** Callback prototype */ 45typedef void (*cbor_double_callback)(void *, double); 46 47/** Callback prototype */ 48typedef void (*cbor_bool_callback)(void *, bool); 49 50/** Callback bundle -- passed to the decoder */ 51struct cbor_callbacks { 52 /** Unsigned int */ 53 cbor_int8_callback uint8; 54 /** Unsigned int */ 55 cbor_int16_callback uint16; 56 /** Unsigned int */ 57 cbor_int32_callback uint32; 58 /** Unsigned int */ 59 cbor_int64_callback uint64; 60 61 /** Negative int */ 62 cbor_int64_callback negint64; 63 /** Negative int */ 64 cbor_int32_callback negint32; 65 /** Negative int */ 66 cbor_int16_callback negint16; 67 /** Negative int */ 68 cbor_int8_callback negint8; 69 70 /** Definite byte string */ 71 cbor_simple_callback byte_string_start; 72 /** Indefinite byte string start */ 73 cbor_string_callback byte_string; 74 75 /** Definite string */ 76 cbor_string_callback string; 77 /** Indefinite string start */ 78 cbor_simple_callback string_start; 79 80 /** Definite array */ 81 cbor_simple_callback indef_array_start; 82 /** Indefinite array */ 83 cbor_collection_callback array_start; 84 85 /** Definite map */ 86 cbor_simple_callback indef_map_start; 87 /** Indefinite map */ 88 cbor_collection_callback map_start; 89 90 /** Tags */ 91 cbor_int64_callback tag; 92 93 /** Half float */ 94 cbor_float_callback float2; 95 /** Single float */ 96 cbor_float_callback float4; 97 /** Double float */ 98 cbor_double_callback float8; 99 /** Undef */ 100 cbor_simple_callback undefined; 101 /** Null */ 102 cbor_simple_callback null; 103 /** Bool */ 104 cbor_bool_callback boolean; 105 106 /** Indefinite item break */ 107 cbor_simple_callback indef_break; 108}; 109 110/** Dummy callback implementation - does nothing */ 111CBOR_EXPORT void cbor_null_uint8_callback(void *, uint8_t); 112 113/** Dummy callback implementation - does nothing */ 114CBOR_EXPORT void cbor_null_uint16_callback(void *, uint16_t); 115 116/** Dummy callback implementation - does nothing */ 117CBOR_EXPORT void cbor_null_uint32_callback(void *, uint32_t); 118 119/** Dummy callback implementation - does nothing */ 120CBOR_EXPORT void cbor_null_uint64_callback(void *, uint64_t); 121 122/** Dummy callback implementation - does nothing */ 123CBOR_EXPORT void cbor_null_negint8_callback(void *, uint8_t); 124 125/** Dummy callback implementation - does nothing */ 126CBOR_EXPORT void cbor_null_negint16_callback(void *, uint16_t); 127 128/** Dummy callback implementation - does nothing */ 129CBOR_EXPORT void cbor_null_negint32_callback(void *, uint32_t); 130 131/** Dummy callback implementation - does nothing */ 132CBOR_EXPORT void cbor_null_negint64_callback(void *, uint64_t); 133 134/** Dummy callback implementation - does nothing */ 135CBOR_EXPORT void cbor_null_string_callback(void *, cbor_data, uint64_t); 136 137/** Dummy callback implementation - does nothing */ 138CBOR_EXPORT void cbor_null_string_start_callback(void *); 139 140/** Dummy callback implementation - does nothing */ 141CBOR_EXPORT void cbor_null_byte_string_callback(void *, cbor_data, uint64_t); 142 143/** Dummy callback implementation - does nothing */ 144CBOR_EXPORT void cbor_null_byte_string_start_callback(void *); 145 146/** Dummy callback implementation - does nothing */ 147CBOR_EXPORT void cbor_null_array_start_callback(void *, uint64_t); 148 149/** Dummy callback implementation - does nothing */ 150CBOR_EXPORT void cbor_null_indef_array_start_callback(void *); 151 152/** Dummy callback implementation - does nothing */ 153CBOR_EXPORT void cbor_null_map_start_callback(void *, uint64_t); 154 155/** Dummy callback implementation - does nothing */ 156CBOR_EXPORT void cbor_null_indef_map_start_callback(void *); 157 158/** Dummy callback implementation - does nothing */ 159CBOR_EXPORT void cbor_null_tag_callback(void *, uint64_t); 160 161/** Dummy callback implementation - does nothing */ 162CBOR_EXPORT void cbor_null_float2_callback(void *, float); 163 164/** Dummy callback implementation - does nothing */ 165CBOR_EXPORT void cbor_null_float4_callback(void *, float); 166 167/** Dummy callback implementation - does nothing */ 168CBOR_EXPORT void cbor_null_float8_callback(void *, double); 169 170/** Dummy callback implementation - does nothing */ 171CBOR_EXPORT void cbor_null_null_callback(void *); 172 173/** Dummy callback implementation - does nothing */ 174CBOR_EXPORT void cbor_null_undefined_callback(void *); 175 176/** Dummy callback implementation - does nothing */ 177CBOR_EXPORT void cbor_null_boolean_callback(void *, bool); 178 179/** Dummy callback implementation - does nothing */ 180CBOR_EXPORT void cbor_null_indef_break_callback(void *); 181 182/** Dummy callback bundle - does nothing */ 183CBOR_EXPORT extern const struct cbor_callbacks cbor_empty_callbacks; 184 185#ifdef __cplusplus 186} 187#endif 188 189#endif // LIBCBOR_CALLBACKS_H 190