[457] | 1 | // Copyright (c) Microsoft. All rights reserved.
|
---|
| 2 | // Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
---|
| 3 |
|
---|
| 4 | #include "azure_c_shared_utility/gballoc.h"
|
---|
| 5 |
|
---|
| 6 | #include "dataserializer.h"
|
---|
| 7 | #include "azure_c_shared_utility/xlogging.h"
|
---|
| 8 |
|
---|
| 9 | MU_DEFINE_ENUM_STRINGS_WITHOUT_INVALID(DATA_SERIALIZER_RESULT, DATA_SERIALIZER_RESULT_VALUES);
|
---|
| 10 |
|
---|
| 11 | BUFFER_HANDLE DataSerializer_Encode(MULTITREE_HANDLE multiTreeHandle, DATA_SERIALIZER_MULTITREE_TYPE dataType, DATA_SERIALIZER_ENCODE_FUNC encodeFunc)
|
---|
| 12 | {
|
---|
| 13 | BUFFER_HANDLE pBuffer;
|
---|
| 14 |
|
---|
| 15 | /* Codes_SRS_DATA_SERIALIZER_07_003: [NULL shall be returned when an invalid parameter is supplied.] */
|
---|
| 16 | if (multiTreeHandle == NULL || encodeFunc == NULL)
|
---|
| 17 | {
|
---|
| 18 | pBuffer = NULL;
|
---|
| 19 | LogError("(Error code: %s)", MU_ENUM_TO_STRING(DATA_SERIALIZER_RESULT, DATA_SERIALIZER_INVALID_ARG) );
|
---|
| 20 | }
|
---|
| 21 | else
|
---|
| 22 | {
|
---|
| 23 | /* Codes_SRS_DATA_SERIALIZER_07_009: [DataSerializer_Encode function shall call into the given DATA_SERIALIZER_ENCODE_FUNC callback with a valid BUFFER object and valid MULTITREE_HANDLE object.] */
|
---|
| 24 | pBuffer = encodeFunc(multiTreeHandle, dataType);
|
---|
| 25 | if (pBuffer == NULL)
|
---|
| 26 | {
|
---|
| 27 | /* Codes_SRS_DATA_SERIALIZER_07_010: [Upon a DATA_SERIALIZER_ENCODE_FUNC failure the DataSerializer_Encode function shall return NULL.] */
|
---|
| 28 | LogError("(Error code: %s)", MU_ENUM_TO_STRING(DATA_SERIALIZER_RESULT, DATA_SERIALIZER_ERROR) );
|
---|
| 29 | }
|
---|
| 30 | }
|
---|
| 31 | /* Codes_SRS_DATA_SERIALIZER_07_002: [DataSerializer_Encode shall return a valid BUFFER_HANDLE when the function executes successfully.] */
|
---|
| 32 | return pBuffer;
|
---|
| 33 | }
|
---|
| 34 |
|
---|
| 35 | MULTITREE_HANDLE DataSerializer_Decode(BUFFER_HANDLE data, DATA_SERIALIZER_DECODE_FUNC decodeFunc)
|
---|
| 36 | {
|
---|
| 37 | MULTITREE_HANDLE multiTreeHandle;
|
---|
| 38 |
|
---|
| 39 | /* Codes_SRS_DATA_SERIALIZER_07_007: [NULL shall be returned when an invalid parameter is supplied.] */
|
---|
| 40 | if (data == NULL || decodeFunc == NULL)
|
---|
| 41 | {
|
---|
| 42 | multiTreeHandle = NULL;
|
---|
| 43 | LogError("(Error code: %s)", MU_ENUM_TO_STRING(DATA_SERIALIZER_RESULT, DATA_SERIALIZER_INVALID_ARG) );
|
---|
| 44 | }
|
---|
| 45 | else
|
---|
| 46 | {
|
---|
| 47 | /* Codes_SRS_DATA_SERIALIZER_07_012: [DataSerializer_Decode function shall call into the given DATA_SERIALIZER_DECODE_FUNC callback with a valid BUFFER object and valid MULTITREE_HANDLE object.] */
|
---|
| 48 | multiTreeHandle = decodeFunc(data);
|
---|
| 49 | if (multiTreeHandle == NULL)
|
---|
| 50 | {
|
---|
| 51 | /* Codes_SRS_DATA_SERIALIZER_07_013: [Upon a DATA_SERIALIZER_DECODE_FUNC callback failure the DataSerializer_Encode function Shall return NULL.] */
|
---|
| 52 | LogError("(Error code: %s)", MU_ENUM_TO_STRING(DATA_SERIALIZER_RESULT, DATA_SERIALIZER_ERROR) );
|
---|
| 53 | }
|
---|
| 54 | }
|
---|
| 55 |
|
---|
| 56 | /* Codes_SRS_DATA_SERIALIZER_07_006: [DataSerializer_Decode shall return a valid MULTITREE_HANDLE when the function executes successfully.] */
|
---|
| 57 | return multiTreeHandle;
|
---|
| 58 | }
|
---|