Program Listing for File Serialization.cpp

Return to documentation for file (components/Util/src/Serialization.cpp)

#include "Serialization.h"


static const char* TAG = "SERIALIZATION";
namespace util {


esp_err_t encode(uint8_t* payload, std::uint8_t* encode, size_t buf_size)
{
    char* res = reinterpret_cast<char*>(payload);
    CborEncoder root_encoder;
    CborError err = CborNoError;


    // Initialize the outermost cbor encoder
    cbor_encoder_init(&root_encoder, encode, buf_size, 0);

    err = cbor_encode_text_string(&root_encoder, res, strlen(res) + 1);
    if (err != CborNoError) {
        // ESP_LOGE(TAG, "error encoding text: %d ", err);
        return ESP_FAIL;
    }
    return ESP_OK;
}


esp_err_t decode(uint8_t* encode, char* decodeData)
{
    CborParser root_parser;
    CborValue it;
    size_t size;
    char* buf;
    CborError err = CborNoError;

    err = cbor_parser_init(encode, 500, 0, &root_parser, &it);
    if (err != CborNoError) {
        ESP_LOGE(TAG, "error parsing buffer: %d ", err);
        return ESP_FAIL;
    }

    err = cbor_value_to_json(stdout, &it, 0);
    if (err != CborNoError) {
        ESP_LOGE(TAG, "error converting value to json: %d ", err);
        return ESP_FAIL;
    }

    puts("");

    CborType type = cbor_value_get_type(&it);

    if (type == CborTextStringType) {
        err = cbor_value_dup_text_string(&it, &buf, &size, &it);
        if (err != CborNoError) {
            ESP_LOGE(TAG, "error decoding buffer: %d ", err);
            return ESP_FAIL;
        }
    }

    memcpy(decodeData, buf, strlen(buf) + 1);

    return ESP_OK;
}
} // namespace util