xref: /freebsd/contrib/libcbor/src/cbor.h (revision 535af610)
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_H_
9 #define LIBCBOR_H_
10 
11 #include "cbor/common.h"
12 #include "cbor/data.h"
13 
14 #include "cbor/arrays.h"
15 #include "cbor/bytestrings.h"
16 #include "cbor/floats_ctrls.h"
17 #include "cbor/ints.h"
18 #include "cbor/maps.h"
19 #include "cbor/strings.h"
20 #include "cbor/tags.h"
21 
22 #include "cbor/callbacks.h"
23 #include "cbor/cbor_export.h"
24 #include "cbor/encoding.h"
25 #include "cbor/serialization.h"
26 #include "cbor/streaming.h"
27 
28 #ifdef __cplusplus
29 extern "C" {
30 #endif
31 
32 /*
33  * ============================================================================
34  * High level decoding
35  * ============================================================================
36  */
37 
38 /** Loads data item from a buffer
39  *
40  * @param source The buffer
41  * @param source_size
42  * @param[out] result Result indicator. #CBOR_ERR_NONE on success
43  * @return Decoded CBOR item. The item's reference count is initialized to one.
44  * @return `NULL` on failure. In that case, \p result contains the location and
45  * description of the error.
46  */
47 _CBOR_NODISCARD CBOR_EXPORT cbor_item_t* cbor_load(
48     cbor_data source, size_t source_size, struct cbor_load_result* result);
49 
50 /** Take a deep copy of an item
51  *
52  * All items this item points to (array and map members, string chunks, tagged
53  * items) will be copied recursively using #cbor_copy. The new item doesn't
54  * alias or point to any items from the original \p item. All the reference
55  * counts in the new structure are set to one.
56  *
57  * @param item item to copy
58  * @return Reference to the new item. The item's reference count is initialized
59  * to one.
60  * @return `NULL` if memory allocation fails
61  */
62 _CBOR_NODISCARD CBOR_EXPORT cbor_item_t* cbor_copy(cbor_item_t* item);
63 
64 #if CBOR_PRETTY_PRINTER
65 #include <stdio.h>
66 
67 CBOR_EXPORT void cbor_describe(cbor_item_t* item, FILE* out);
68 #endif
69 
70 #ifdef __cplusplus
71 }
72 #endif
73 
74 #endif  // LIBCBOR_H_
75