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