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 /** Copy the item with all items converted to definite length equivalents 65 * 66 * Deep copy semantics follow #cbor_copy 67 * 68 * @param item item to copy 69 * @return Reference to the new item. The item's reference count is initialized 70 * to one. 71 * @return `NULL` if memory allocation fails 72 */ 73 _CBOR_NODISCARD CBOR_EXPORT cbor_item_t* cbor_copy_definite(cbor_item_t* item); 74 75 #if CBOR_PRETTY_PRINTER 76 #include <stdio.h> 77 78 CBOR_EXPORT void cbor_describe(cbor_item_t* item, FILE* out); 79 #endif 80 81 #ifdef __cplusplus 82 } 83 #endif 84 85 #endif // LIBCBOR_H_ 86