summaryrefslogtreecommitdiff
path: root/src/cbor/include/cbor_encoder.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/cbor/include/cbor_encoder.hpp')
-rw-r--r--src/cbor/include/cbor_encoder.hpp55
1 files changed, 31 insertions, 24 deletions
diff --git a/src/cbor/include/cbor_encoder.hpp b/src/cbor/include/cbor_encoder.hpp
index 0edbbdff..9479a3b6 100644
--- a/src/cbor/include/cbor_encoder.hpp
+++ b/src/cbor/include/cbor_encoder.hpp
@@ -4,27 +4,34 @@
#include "esp-idf/components/cbor/tinycbor/src/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);
-
- auto WriteString(const std::string &val) -> void;
- auto WriteUnsigned(uint32_t val) -> void;
- auto WriteSigned(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
+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