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_SERIALIZATION_H 9 #define LIBCBOR_SERIALIZATION_H 10 11 #include "cbor/cbor_export.h" 12 #include "cbor/common.h" 13 14 #ifdef __cplusplus 15 extern "C" { 16 #endif 17 18 /* 19 * ============================================================================ 20 * High level encoding 21 * ============================================================================ 22 */ 23 24 /** Serialize the given item 25 * 26 * @param item[borrow] A data item 27 * @param buffer Buffer to serialize to 28 * @param buffer_size Size of the \p buffer 29 * @return Length of the result. 0 on failure. 30 */ 31 CBOR_EXPORT size_t cbor_serialize(const cbor_item_t *item, 32 cbor_mutable_data buffer, size_t buffer_size); 33 34 /** Serialize the given item, allocating buffers as needed 35 * 36 * \rst 37 * .. warning:: It is your responsibility to free the buffer using an 38 * appropriate ``free`` implementation. 39 * \endrst 40 * 41 * @param item[borrow] A data item 42 * @param buffer[out] Buffer containing the result 43 * @param buffer_size[out] Size of the \p buffer 44 * @return Length of the result. 0 on failure, in which case \p buffer is 45 * ``NULL``. 46 */ 47 CBOR_EXPORT size_t cbor_serialize_alloc(const cbor_item_t *item, 48 cbor_mutable_data *buffer, 49 size_t *buffer_size); 50 51 /** Serialize an uint 52 * 53 * @param item[borrow] A uint 54 * @param buffer Buffer to serialize to 55 * @param buffer_size Size of the \p buffer 56 * @return Length of the result. 0 on failure. 57 */ 58 CBOR_EXPORT size_t cbor_serialize_uint(const cbor_item_t *, cbor_mutable_data, 59 size_t); 60 61 /** Serialize a negint 62 * 63 * @param item[borrow] A neging 64 * @param buffer Buffer to serialize to 65 * @param buffer_size Size of the \p buffer 66 * @return Length of the result. 0 on failure. 67 */ 68 CBOR_EXPORT size_t cbor_serialize_negint(const cbor_item_t *, cbor_mutable_data, 69 size_t); 70 71 /** Serialize a bytestring 72 * 73 * @param item[borrow] A bytestring 74 * @param buffer Buffer to serialize to 75 * @param buffer_size Size of the \p buffer 76 * @return Length of the result. 0 on failure. 77 */ 78 CBOR_EXPORT size_t cbor_serialize_bytestring(const cbor_item_t *, 79 cbor_mutable_data, size_t); 80 81 /** Serialize a string 82 * 83 * @param item[borrow] A string 84 * @param buffer Buffer to serialize to 85 * @param buffer_size Size of the \p buffer 86 * @return Length of the result. 0 on failure. 87 */ 88 CBOR_EXPORT size_t cbor_serialize_string(const cbor_item_t *, cbor_mutable_data, 89 size_t); 90 91 /** Serialize an array 92 * 93 * @param item[borrow] An array 94 * @param buffer Buffer to serialize to 95 * @param buffer_size Size of the \p buffer 96 * @return Length of the result. 0 on failure. 97 */ 98 CBOR_EXPORT size_t cbor_serialize_array(const cbor_item_t *, cbor_mutable_data, 99 size_t); 100 101 /** Serialize a map 102 * 103 * @param item[borrow] A map 104 * @param buffer Buffer to serialize to 105 * @param buffer_size Size of the \p buffer 106 * @return Length of the result. 0 on failure. 107 */ 108 CBOR_EXPORT size_t cbor_serialize_map(const cbor_item_t *, cbor_mutable_data, 109 size_t); 110 111 /** Serialize a tag 112 * 113 * @param item[borrow] A tag 114 * @param buffer Buffer to serialize to 115 * @param buffer_size Size of the \p buffer 116 * @return Length of the result. 0 on failure. 117 */ 118 CBOR_EXPORT size_t cbor_serialize_tag(const cbor_item_t *, cbor_mutable_data, 119 size_t); 120 121 /** Serialize a 122 * 123 * @param item[borrow] A float or ctrl 124 * @param buffer Buffer to serialize to 125 * @param buffer_size Size of the \p buffer 126 * @return Length of the result. 0 on failure. 127 */ 128 CBOR_EXPORT size_t cbor_serialize_float_ctrl(const cbor_item_t *, 129 cbor_mutable_data, size_t); 130 131 #ifdef __cplusplus 132 } 133 #endif 134 135 #endif // LIBCBOR_SERIALIZATION_H 136