diff options
| author | jacqueline <me@jacqueline.id.au> | 2022-12-02 17:25:53 +1100 |
|---|---|---|
| committer | jacqueline <me@jacqueline.id.au> | 2022-12-02 17:25:53 +1100 |
| commit | c36208016eefcdfdeff045f675f74fdb69dddb52 (patch) | |
| tree | 817bd458ca14a6dd0d200390a0b11cb2120aa33f /src/cbor_wrapper/cbor_decoder.cpp | |
| parent | 222c810b07ffc635fc7908d121e97e4d65ccc5c8 (diff) | |
| download | tangara-fw-c36208016eefcdfdeff045f675f74fdb69dddb52.tar.gz | |
better cbor handling
Diffstat (limited to 'src/cbor_wrapper/cbor_decoder.cpp')
| -rw-r--r-- | src/cbor_wrapper/cbor_decoder.cpp | 112 |
1 files changed, 0 insertions, 112 deletions
diff --git a/src/cbor_wrapper/cbor_decoder.cpp b/src/cbor_wrapper/cbor_decoder.cpp deleted file mode 100644 index a99cca02..00000000 --- a/src/cbor_wrapper/cbor_decoder.cpp +++ /dev/null @@ -1,112 +0,0 @@ -#include "cbor_decoder.hpp" - -#include <cstdint> -#include <string> - -#include "cbor.h" -#include "result.hpp" - -static const int kDecoderFlags = 0; - -namespace cbor { - -auto parse_stdstring(const CborValue* val, std::string* out) -> CborError { - char* buf; - size_t len; - CborError err = cbor_value_dup_text_string(val, &buf, &len, NULL); - if (err != CborNoError) { - return err; - } - *out = std::string(buf, len); - free(buf); - return err; -} - -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, kDecoderFlags, &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); -} - -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); -} - -template <> -auto ArrayDecoder::NextValue() -> cpp::result<int64_t, CborError> { - return NextValue(&cbor_value_is_integer, &cbor_value_get_int); -} -template <> -auto ArrayDecoder::NextValue() -> cpp::result<uint64_t, CborError> { - return NextValue(&cbor_value_is_unsigned_integer, &cbor_value_get_uint64); -} -template <> -auto ArrayDecoder::NextValue() -> cpp::result<std::string, CborError> { - return NextValue(&cbor_value_is_byte_string, &parse_stdstring); -} - -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, kDecoderFlags, &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); -} - -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); -} - -template <> -auto MapDecoder::FindValue(const std::string& key) -> std::optional<int64_t> { - return FindValue(key, &cbor_value_is_integer, &cbor_value_get_int); -} -template <> -auto MapDecoder::FindValue(const std::string& key) -> std::optional<uint64_t> { - return FindValue(key, &cbor_value_is_unsigned_integer, - &cbor_value_get_uint64); -} -template <> -auto MapDecoder::FindValue(const std::string& key) - -> std::optional<std::string> { - return FindValue(key, &cbor_value_is_byte_string, &parse_stdstring); -} - -} // namespace cbor |
