diff options
| author | jacqueline <me@jacqueline.id.au> | 2022-12-02 13:39:00 +1100 |
|---|---|---|
| committer | jacqueline <me@jacqueline.id.au> | 2022-12-02 13:39:00 +1100 |
| commit | 222c810b07ffc635fc7908d121e97e4d65ccc5c8 (patch) | |
| tree | 91c7b5c72a11770ebf3695bf0c234597b2bc419d /src/cbor | |
| parent | 71a4f5166f5491dc0982a18d62c63e28b3a52faa (diff) | |
| download | tangara-fw-222c810b07ffc635fc7908d121e97e4d65ccc5c8.tar.gz | |
fix build errors
Diffstat (limited to 'src/cbor')
| -rw-r--r-- | src/cbor/CMakeLists.txt | 6 | ||||
| -rw-r--r-- | src/cbor/cbor_decoder.cpp | 131 | ||||
| -rw-r--r-- | src/cbor/cbor_encoder.cpp | 60 | ||||
| -rw-r--r-- | src/cbor/include/cbor_decoder.hpp | 145 | ||||
| -rw-r--r-- | src/cbor/include/cbor_encoder.hpp | 39 |
5 files changed, 0 insertions, 381 deletions
diff --git a/src/cbor/CMakeLists.txt b/src/cbor/CMakeLists.txt deleted file mode 100644 index cd5186e0..00000000 --- a/src/cbor/CMakeLists.txt +++ /dev/null @@ -1,6 +0,0 @@ -idf_component_register( - SRCS "cbor_decoder.cpp" "cbor_encoder.cpp" - INCLUDE_DIRS "include" - REQUIRES "cbor" "result") - -target_compile_options(${COMPONENT_LIB} PRIVATE ${EXTRA_WARNINGS}) diff --git a/src/cbor/cbor_decoder.cpp b/src/cbor/cbor_decoder.cpp deleted file mode 100644 index 20696afb..00000000 --- a/src/cbor/cbor_decoder.cpp +++ /dev/null @@ -1,131 +0,0 @@ -#include "cbor_decoder.hpp" -#include <cstdint> -#include "esp-idf/components/cbor/tinycbor/src/cbor.h" -#include "include/cbor_decoder.hpp" - -namespace cbor { - -static auto ArrayDecoder::Create(uint8_t* buffer, size_t buffer_len) - -> cpp::result<std::unique_ptr<ArrayDecoder>, CborError> { - auto decoder = std::make_unique<ArrayDecoder>(); - cbor_parser_init(buffer, buffer_len, &decoder->parser_, &decoder->root_); - if (!cbor_value_is_array(&decoder->root_)) { - return cpp::fail(CborErrorIllegalType); - } - CborError err = cbor_value_enter_container(&decoder->root_, &decoder->it_); - if (err != CborNoError) { - return cpp::fail(err); - } - return std::move(decoder); -} - -static auto ArrayDecoder::Create(CborValue& root) - -> cpp::result<std::unique_ptr<ArrayDecoder>, CborError> { - auto decoder = std::make_unique<ArrayDecoder>(); - decoder->root_ = root; - if (!cbor_value_is_array(&decoder->root_)) { - return cpp::fail(CborErrorIllegalType); - } - - CborError err = cbor_value_enter_container(&decoder->root_, &decoder->it_); - if (err != CborNoError) { - return cpp::fail(err); - } - return std::move(decoder); -} - -static auto MapDecoder::Create(uint8_t* buffer, size_t buffer_len) - -> cpp::result<std::unique_ptr<MapDecoder>, CborError> { - auto decoder = std::make_unique<MapDecoder>(); - cbor_parser_init(buffer, buffer_len, &decoder->parser_, &decoder->root_); - if (!cbor_value_is_map(&decoder->root_)) { - return cpp::fail(CborErrorIllegalType); - } - CborError err = cbor_value_enter_container(&decoder->root_, &decoder->it_); - if (err != CborNoError) { - return cpp::fail(err); - } - return std::move(decoder); -} - -static auto MapDecoder::Create(CborValue& root) - -> cpp::result<std::unique_ptr<MapDecoder>, CborError> { - auto decoder = std::make_unique<MapDecoder>(); - decoder->root_ = root; - if (!cbor_value_is_map(&decoder->root_)) { - return cpp::fail(CborErrorIllegalType); - } - CborError err = cbor_value_enter_container(&decoder->root_, &decoder->it_); - if (err != CborNoError) { - return cpp::fail(err); - } - return std::move(decoder); -} - -auto MapDecoder::FindString(const std::string& key) - -> std::optional<std::string> { - CborValue val; - if (error_ != CborNoError) { - return {}; - } - if (cbor_value_map_find_value(&it_, key.c_str(), &val) != CborNoError) { - return {}; - } - if (!cbor_value_is_byte_string(&val)) { - error_ = CborErrorIllegalType; - return {}; - } - uint8_t* buf; - size_t len; - error_ = cbor_value_dup_byte_string(&val, &buf, &len, NULL); - if (error_ != CborNoError) { - return cpp::fail(error_); - } - std::string ret(buf, len); - free(buf); - return ret; -} - -auto MapDecoder::FindUnsigned(const std::string& key) - -> std::optional<uint32_t> { - CborValue val; - if (error_ != CborNoError) { - return {}; - } - if (cbor_value_map_find_value(&it_, key.c_str(), &val) != CborNoError) { - return {}; - } - if (!cbor_value_is_unsigned_integer(&val)) { - error_ = CborErrorIllegalType; - return {}; - } - uint64_t ret; - error_ = cbor_value_get_uint64(&val, &ret); - if (error_ != CborNoError) { - return cpp::fail(error_); - } - return ret; -} - -auto MapDecoder::FindSigned(const std::string& key) -> std::optional<int32_t> { - CborValue val; - if (error_ != CborNoError) { - return {}; - } - if (cbor_value_map_find_value(&it_, key.c_str(), &val) != CborNoError) { - // Don't store this as an error; missing keys are fine. - return {}; - } - if (!cbor_value_is_integer(&val)) { - error_ = CborErrorIllegalType; - return {}; - } - int32_t ret; - error_ = cbor_value_get_int(&val, &ret); - if (error_ != CborNoError) { - return cpp::fail(error_); - } - return ret; -} - -} // namespace cbor diff --git a/src/cbor/cbor_encoder.cpp b/src/cbor/cbor_encoder.cpp deleted file mode 100644 index 6940917e..00000000 --- a/src/cbor/cbor_encoder.cpp +++ /dev/null @@ -1,60 +0,0 @@ -#include "cbor_encoder.hpp" -#include <cstdint> -#include "esp-idf/components/cbor/tinycbor/src/cbor.h" - -namespace cbor { - -static const int kEncoderFlags = 0; - -Encoder::Encoder(ContainerType type, - uint32_t container_len, - uint8_t* buffer, - size_t buffer_len) { - cbor_encoder_init(&root_encoder, buffer, buffer_len, kEncoderFlags); - switch (type) { - case CONTAINER_ARRAY: - error_ = cbor_encoder_create_array(&encoder, &container_encoder_, - container_len); - break; - case CONTAINER_MAP: - error_ = - cbor_encoder_create_map(&encoder, &container_encoder_, container_len); - break; - } -} - -auto Encoder::WriteValue(const std::string& val) -> void { - if (error_ != CborNoError) { - return; - } - error_ = - cbor_encode_byte_string(&container_encoder_, val.c_str(), val.size()); -} - -auto Encoder::WriteValue(uint32_t val) -> void { - if (error_ != CborNoError) { - return; - } - error_ = cbor_encode_uint(&container_encoder_, val); -} - -auto Encoder::WriteValue(int32_t val) -> void { - if (error_ != CborNoError) { - return; - } - error_ = cbor_encode_int(&container_encoder_, val); -} - -auto Encoder::Finish() -> cpp::result<size_t, CborError> { - if (error_ != CborNoError) { - return cpp::fail(error_); - } - if (CborError final_error = - cbor_encoder_close_container(&root_encoder, &container_encoder_) != - CborNoError) { - return cpp::fail(final_error); - } - return cbor_encoder_get_buffer_size(&root_encoder); -} - -} // namespace cbor diff --git a/src/cbor/include/cbor_decoder.hpp b/src/cbor/include/cbor_decoder.hpp deleted file mode 100644 index 879a1efa..00000000 --- a/src/cbor/include/cbor_decoder.hpp +++ /dev/null @@ -1,145 +0,0 @@ -#pragma once - -#include <stdint.h> - -#include <cstdint> - -#include "cbor.h" - -namespace cbor { - -static auto parse_stdstring(CborValue* val, std::string* out) -> CborError { - uint8_t* buf; - size_t len; - CborError err = cbor_value_dup_byte_string(val, &buf, &len, NULL); - if (err != CborNoError) { - return err; - } - *out = std::move(std::string(buf, len)); - free(buf); - return err -} - -class ArrayDecoder { - public: - static auto Create(uint8_t* buffer, size_t buffer_len) - -> cpp::result<std::unique_ptr<ArrayDecoder>, CborError>; - - static auto Create(CborValue& root) - -> cpp::result<std::unique_ptr<ArrayDecoder>, CborError>; - - template <typename T> - auto NextValue() -> cpp::result<T, CborError>; - - template <> - auto NextValue() -> cpp::result<int64_t, CborError> { - return NextValue(&cbor_value_is_integer, &cbor_value_get_int); - } - template <> - auto NextValue() -> cpp::result<uint64_t, CborError> { - return NextValue(&cbor_value_is_unsigned_integer, &cbor_value_get_uint64); - } - template <> - auto NextValue() -> cpp::result<std::string, CborError> { - return NextValue(&cbor_value_is_byte_string, &parse_stdstring); - } - - template <typename T> - auto NextValue(bool (*is_valid)(CborValue*), - CborError (*parse)(CborValue*, T*)) - -> cpp::result<T, CborError> { - if (error_ != CborNoError) { - return cpp::fail(error_); - } - if (!is_valid(&it_)) { - error_ = CborErrorIllegalType; - return cpp::fail(error_); - } - T ret; - error_ = parse(&it_, &ret); - if (error_ != CborNoError) { - return cpp::fail(error_); - } - error_ = cbor_value_advance(&it_); - if (error_ != CborNoError) { - return cpp::fail(error_); - } - return ret; - } - - auto Failed() -> CborError { return error_; } - - auto Iterator() -> CborValue& { return it_; } - - ArrayDecoder(const ArrayDecoder&) = delete; - ArrayDecoder& operator=(const ArrayDecoder&) = delete; - - private: - CborParser parser_; - CborValue root_; - - CborValue it_; - CborError error_ = CborNoError; -}; - -class MapDecoder { - public: - static auto Create(uint8_t* buffer, size_t buffer_len) - -> cpp::result<std::unique_ptr<MapDecoder>, CborError>; - - static auto Create(CborValue& root) - -> cpp::result<std::unique_ptr<MapDecoder>, CborError>; - - template <typename T> - auto FindValue(const std::string& key) -> std::optional<T>; - - template <> - auto FindValue(const std::string& key) -> std::optional<int64_t> { - return FindValue(key, &cbor_value_is_integer, &cbor_value_get_int); - } - template <> - auto FindValue(const std::string& key) -> std::optional<uint64_t> { - return FindValue(key, &cbor_value_is_unsigned_integer, - &cbor_value_get_uint64); - } - template <> - auto FindValue(const std::string& key) -> std::optional<std::string> { - return FindValue(key, &cbor_value_is_byte_string, &parse_stdstring); - } - - template <typename T> - auto FindValue(const std::string& key, - bool (*is_valid)(CborValue*), - CborError (*parse)(CborValue*, T*)) -> std::optional<T> { - if (error_ != CborNoError) { - return {}; - } - if (cbor_value_map_find_value(&it_, key.c_str(), &val) != CborNoError) { - return {}; - } - if (!is_valid(&val)) { - error_ = CborErrorIllegalType; - return {}; - } - T ret; - error_ = parse(&val, &ret); - if (error_ != CborNoError) { - return cpp::fail(error_); - } - return ret; - } - - auto Failed() -> CborError { return error_; } - - MapDecoder(const MapDecoder&) = delete; - MapDecoder& operator=(const MapDecoder&) = delete; - - private: - CborParser parser_; - CborValue root_; - - CborValue it_; - CborError error_ = CborNoError; -}; - -} // namespace cbor diff --git a/src/cbor/include/cbor_encoder.hpp b/src/cbor/include/cbor_encoder.hpp deleted file mode 100644 index 8f5214f6..00000000 --- a/src/cbor/include/cbor_encoder.hpp +++ /dev/null @@ -1,39 +0,0 @@ -#pragma once - -#include <cstdint> - -#include "cbor.h" - -namespace cbor { - -class Encoder { - public: - enum ContainerType { CONTAINER_ARRAY, CONTAINER_MAP }; - Encoder(ContainerType type, - uint32_t container_len, - uint8_t* buffer, - size_t buffer_len); - - template <typename T> - auto WriteKeyValue(const std::string& key, const T& val) -> void { - WriteValue(key); - WriteValue(val); - } - - auto WriteValue(const std::string& val) -> void; - auto WriteValue(uint32_t val) -> void; - auto WriteValue(int32_t val) -> void; - - auto Finish() -> cpp::result<size_t, CborError>; - - Encoder(const Encoder&) = delete; - Encoder& operator=(const Encoder&) = delete; - - private: - CborEncoder root_encoder_; - CborEncoder container_encoder_; - - CborError error_ = CborNoError; -}; - -} // namespace cbor |
