AWS IoT Device SDK C++ v2 1.44.1
AWS IoT Device SDK C++ v2
Loading...
Searching...
No Matches
Cbor.h
Go to the documentation of this file.
1#pragma once
6
7#include <aws/common/cbor.h>
8
9#include <aws/crt/Types.h>
10
11namespace Aws
12{
13 namespace Crt
14 {
15 namespace Cbor
16 {
35 enum class CborType
36 {
37 Unknown = AWS_CBOR_TYPE_UNKNOWN,
38 UInt = AWS_CBOR_TYPE_UINT,
39 NegInt = AWS_CBOR_TYPE_NEGINT,
40 Float = AWS_CBOR_TYPE_FLOAT,
41 Bytes = AWS_CBOR_TYPE_BYTES,
42 Text = AWS_CBOR_TYPE_TEXT,
43 ArrayStart = AWS_CBOR_TYPE_ARRAY_START,
44 MapStart = AWS_CBOR_TYPE_MAP_START,
45 Tag = AWS_CBOR_TYPE_TAG,
46 Bool = AWS_CBOR_TYPE_BOOL,
47 Null = AWS_CBOR_TYPE_NULL,
48 Undefined = AWS_CBOR_TYPE_UNDEFINED,
49 Break = AWS_CBOR_TYPE_BREAK,
50 IndefBytesStart = AWS_CBOR_TYPE_INDEF_BYTES_START,
51 IndefTextStart = AWS_CBOR_TYPE_INDEF_TEXT_START,
52 IndefArrayStart = AWS_CBOR_TYPE_INDEF_ARRAY_START,
53 IndefMapStart = AWS_CBOR_TYPE_INDEF_MAP_START,
54 };
55
57 {
58 public:
59 CborEncoder(const CborEncoder &) = delete;
61 CborEncoder &operator=(const CborEncoder &) = delete;
63
64 CborEncoder(Allocator *allocator = ApiAllocator()) noexcept;
65 ~CborEncoder() noexcept;
66
73 ByteCursor GetEncodedData() noexcept;
74
78 void Reset() noexcept;
79
86 void WriteUInt(uint64_t value) noexcept;
87
95 void WriteNegInt(uint64_t value) noexcept;
96
106 void WriteFloat(double value) noexcept;
107
115 void WriteBytes(ByteCursor value) noexcept;
116
124 void WriteText(ByteCursor value) noexcept;
125
133 void WriteArrayStart(size_t number_entries) noexcept;
134
144 void WriteMapStart(size_t number_entries) noexcept;
145
155 void WriteTag(uint64_t tag_number) noexcept;
156
160 void WriteNull() noexcept;
161
165 void WriteUndefined() noexcept;
166
170 void WriteBool(bool value) noexcept;
171
177 void WriteBreak() noexcept;
178
184 void WriteIndefBytesStart() noexcept;
185
191 void WriteIndefTextStart() noexcept;
192
198 void WriteIndefArrayStart() noexcept;
199
205 void WriteIndefMapStart() noexcept;
206
207 private:
208 struct aws_cbor_encoder *m_encoder;
209 };
210
212 {
213
214 public:
215 CborDecoder(const CborDecoder &) = delete;
219
226 CborDecoder(ByteCursor src, Allocator *allocator = ApiAllocator()) noexcept;
227 ~CborDecoder() noexcept;
228
235 size_t GetRemainingLength() noexcept;
236
245 Optional<CborType> PeekType() noexcept;
246
266 bool ConsumeNextWholeDataItem() noexcept;
267
286 bool ConsumeNextSingleElement() noexcept;
287
302 Optional<uint64_t> PopNextUnsignedIntVal() noexcept;
303 Optional<uint64_t> PopNextNegativeIntVal() noexcept;
304 Optional<double> PopNextFloatVal() noexcept;
305 Optional<bool> PopNextBooleanVal() noexcept;
308
324 Optional<uint64_t> PopNextArrayStart() noexcept;
325
341 Optional<uint64_t> PopNextMapStart() noexcept;
342
352 Optional<uint64_t> PopNextTagVal() noexcept;
353
357 int LastError() const noexcept { return m_lastError ? m_lastError : AWS_ERROR_UNKNOWN; }
358
359 private:
360 struct aws_cbor_decoder *m_decoder;
361 /* Error */
362 int m_lastError;
363 };
364 } // namespace Cbor
365
366 } // namespace Crt
367} // namespace Aws
Optional< double > PopNextFloatVal() noexcept
Definition Cbor.cpp:190
size_t GetRemainingLength() noexcept
Definition Cbor.cpp:133
int LastError() const noexcept
Definition Cbor.h:357
Optional< uint64_t > PopNextNegativeIntVal() noexcept
Definition Cbor.cpp:179
CborDecoder & operator=(CborDecoder &&)=delete
Optional< uint64_t > PopNextMapStart() noexcept
Definition Cbor.cpp:245
CborDecoder(CborDecoder &&)=delete
Optional< ByteCursor > PopNextBytesVal() noexcept
Definition Cbor.cpp:212
Optional< ByteCursor > PopNextTextVal() noexcept
Definition Cbor.cpp:223
CborDecoder & operator=(const CborDecoder &)=delete
Optional< uint64_t > PopNextArrayStart() noexcept
Definition Cbor.cpp:234
Optional< bool > PopNextBooleanVal() noexcept
Definition Cbor.cpp:201
Optional< CborType > PeekType() noexcept
Definition Cbor.cpp:138
Optional< uint64_t > PopNextTagVal() noexcept
Definition Cbor.cpp:256
CborDecoder(const CborDecoder &)=delete
bool ConsumeNextSingleElement() noexcept
Definition Cbor.cpp:158
bool ConsumeNextWholeDataItem() noexcept
Definition Cbor.cpp:148
Optional< uint64_t > PopNextUnsignedIntVal() noexcept
Definition Cbor.cpp:168
void WriteNull() noexcept
Definition Cbor.cpp:77
void Reset() noexcept
Definition Cbor.cpp:33
void WriteFloat(double value) noexcept
Definition Cbor.cpp:47
void WriteIndefTextStart() noexcept
Definition Cbor.cpp:102
CborEncoder(CborEncoder &&)=delete
void WriteIndefArrayStart() noexcept
Definition Cbor.cpp:107
void WriteBreak() noexcept
Definition Cbor.cpp:92
CborEncoder & operator=(const CborEncoder &)=delete
void WriteMapStart(size_t number_entries) noexcept
Definition Cbor.cpp:67
void WriteTag(uint64_t tag_number) noexcept
Definition Cbor.cpp:72
void WriteIndefMapStart() noexcept
Definition Cbor.cpp:112
void WriteBool(bool value) noexcept
Definition Cbor.cpp:87
void WriteBytes(ByteCursor value) noexcept
Definition Cbor.cpp:52
void WriteArrayStart(size_t number_entries) noexcept
Definition Cbor.cpp:62
void WriteNegInt(uint64_t value) noexcept
Definition Cbor.cpp:42
void WriteUInt(uint64_t value) noexcept
Definition Cbor.cpp:38
void WriteIndefBytesStart() noexcept
Definition Cbor.cpp:97
CborEncoder(const CborEncoder &)=delete
CborEncoder & operator=(CborEncoder &&)=delete
void WriteUndefined() noexcept
Definition Cbor.cpp:82
void WriteText(ByteCursor value) noexcept
Definition Cbor.cpp:57
ByteCursor GetEncodedData() noexcept
Definition Cbor.cpp:29
Definition Optional.h:19
#define AWS_CRT_CPP_API
Definition Exports.h:36
Definition Cbor.h:16
CborType
Definition Cbor.h:36
@ UInt
Definition Cbor.h:38
@ ArrayStart
Definition Cbor.h:43
@ Float
Definition Cbor.h:40
@ MapStart
Definition Cbor.h:44
@ Bytes
Definition Cbor.h:41
@ IndefMapStart
Definition Cbor.h:53
@ IndefArrayStart
Definition Cbor.h:52
@ Unknown
Definition Cbor.h:37
@ NegInt
Definition Cbor.h:39
@ Text
Definition Cbor.h:42
@ IndefTextStart
Definition Cbor.h:51
@ Null
Definition Cbor.h:47
@ Tag
Definition Cbor.h:45
@ Bool
Definition Cbor.h:46
@ IndefBytesStart
Definition Cbor.h:50
@ Break
Definition Cbor.h:49
@ Undefined
Definition Cbor.h:48
Definition Allocator.h:13
aws_byte_cursor ByteCursor
Definition Types.h:31
AWS_CRT_CPP_API Allocator * ApiAllocator() noexcept
Definition Allocator.cpp:24
aws_allocator Allocator
Definition Allocator.h:14
Definition Allocator.h:11