summaryrefslogtreecommitdiff
path: root/src/cbor
diff options
context:
space:
mode:
Diffstat (limited to 'src/cbor')
-rw-r--r--src/cbor/CMakeLists.txt6
-rw-r--r--src/cbor/cbor_decoder.cpp131
-rw-r--r--src/cbor/cbor_encoder.cpp60
-rw-r--r--src/cbor/include/cbor_decoder.hpp145
-rw-r--r--src/cbor/include/cbor_encoder.hpp39
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