Skip to content

Commit c3e7853

Browse files
committed
Schema class and ShapeSerializer interface with PIMPL serializers
1 parent 030a0ea commit c3e7853

6 files changed

Lines changed: 254 additions & 284 deletions

File tree

Lines changed: 42 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,43 +1,47 @@
11
#pragma once
22

3+
#include <aws/core/Core_EXPORTS.h>
34
#include <smithy/client/schema/ShapeSerializer.h>
4-
#include <aws/crt/cbor/Cbor.h>
5+
6+
#include <memory>
57

68
namespace smithy {
7-
namespace schema {
8-
class AWS_CORE_API CborShapeSerializer : public ShapeSerializer {
9-
public:
10-
CborShapeSerializer() = default;
11-
12-
void BeginStructure(const Schema& schema) override;
13-
void EndStructure() override;
14-
15-
void WriteBoolean(const FieldSchema& field, bool value) override;
16-
void WriteInteger(const FieldSchema& field, int value) override;
17-
void WriteLong(const FieldSchema& field, int64_t value) override;
18-
void WriteDouble(const FieldSchema& field, double value) override;
19-
void WriteString(const FieldSchema& field, const Aws::String& value) override;
20-
void WriteTimestamp(const FieldSchema& field, const Aws::Utils::DateTime& value) override;
21-
void WriteBlob(const FieldSchema& field, const Aws::Utils::ByteBuffer& value) override;
22-
void WriteEnum(const FieldSchema& field, int value) override;
23-
void WriteNull(const FieldSchema& field) override;
24-
25-
void BeginList(const FieldSchema& field, size_t count) override;
26-
void EndList() override;
27-
28-
void BeginMap(const FieldSchema& field,size_t count) override;
29-
void WriteMapKey(const Aws::String& key) override;
30-
void EndMap() override;
31-
32-
void BeginNestedStructure(const FieldSchema& field) override;
33-
void EndNestedStructure() override;
34-
35-
Aws::String GetPayload() const;
36-
private:
37-
void WriteKey(const chat* key);
38-
39-
Aws::Crt::Cbor::CborEncoder m_encoder;
40-
size_t m_structFieldCount = 0;
41-
};
42-
};
43-
}
9+
namespace schema {
10+
11+
class AWS_CORE_API CborShapeSerializer : public ShapeSerializer {
12+
public:
13+
CborShapeSerializer();
14+
~CborShapeSerializer();
15+
16+
void BeginStructure(const Schema& schema) override;
17+
void EndStructure() override;
18+
19+
void WriteBoolean(const Schema& schema, bool value) override;
20+
void WriteInteger(const Schema& schema, int value) override;
21+
void WriteLong(const Schema& schema, int64_t value) override;
22+
void WriteDouble(const Schema& schema, double value) override;
23+
void WriteString(const Schema& schema, const Aws::String& value) override;
24+
void WriteTimestamp(const Schema& schema, const Aws::Utils::DateTime& value) override;
25+
void WriteBlob(const Schema& schema, const Aws::Utils::ByteBuffer& value) override;
26+
void WriteEnum(const Schema& schema, int value) override;
27+
void WriteNull(const Schema& schema) override;
28+
29+
void BeginList(const Schema& schema, size_t count) override;
30+
void EndList() override;
31+
32+
void BeginMap(const Schema& schema, size_t count) override;
33+
void WriteMapKey(const Aws::String& key) override;
34+
void EndMap() override;
35+
36+
void BeginNestedStructure(const Schema& schema) override;
37+
void EndNestedStructure() override;
38+
39+
Aws::String GetPayload() const;
40+
41+
private:
42+
struct Impl;
43+
std::unique_ptr<Impl> m_impl;
44+
};
45+
46+
} // namespace schema
47+
} // namespace smithy
Lines changed: 41 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -1,55 +1,46 @@
11
#pragma once
22

33
#include <smithy/client/schema/ShapeSerializer.h>
4-
#include <aws/core/utils/json/JsonSerializer.h>
5-
#include <aws/code/utils/memory/stl/AWSVector.h>
4+
5+
#include <memory>
66

77
namespace smithy {
8-
namespace schema {
9-
class JsonShapeSerializer: public ShapeSerializer {
10-
public:
11-
JsonShapeSerializer() = default;
12-
13-
void BeginStructure(const Schema& schema) override;
14-
void EndStructure() override;
15-
16-
void WriteBoolean(const FieldSchema& field, bool value) override;
17-
void WriteInteger(const FieldSchema& field, int value) override;
18-
void WriteLong(const FieldSchema& field, int64_t value) override;
19-
void WriteDouble(const FieldSchema& field, double value) override;
20-
void WriteString(const FieldSchema& field, const Aws::String& value) override;
21-
void WriteTimestamp(const FieldSchema& field, const Aws::Utils::DateTime& value) override;
22-
void WriteBlob(const FieldSchema& field, const Aws::Utils::ByteBuffer& value) override;
23-
void WriteEnum(const FieldSchema& field, int value) override;
24-
void WriteNull(const FieldSchema& field) override;
25-
26-
void BeginList(const FieldSchema& field, size_t count) override;
27-
void EndList() override;
28-
29-
void BeginMap(const FieldSchema& field,size_t count) override;
30-
void WriteMapKey(const Aws::String& key) override;
31-
void EndMap() override;
32-
33-
void BeginNestedStructure(const FieldSchema& field) override;
34-
void EndNestedStructure() override;
35-
36-
Aws::Utils::Json::JsonValue GetResult() const { return m_root; }
37-
Aws::String GetPayload() const;
38-
private:
39-
Aws::Utils::Json::JsonValue& CurrentObject();
40-
41-
Aws::Utils::Json::JsonValue m_root;
42-
43-
struct StackEntry {
44-
Aws::Utils::Json::JsonValue object;
45-
const char* fieldName;
46-
bool isList;
47-
Aws::Utils::Array<Aws::Utils::Json::JsonValue> listItems;
48-
size_t listIndex;
49-
};
50-
Aws::Vector<StackEntry> m_stack;
51-
Aws::String m_currentMapKey;
52-
bool m_inMap = false;
53-
};
54-
}
55-
}
8+
namespace schema {
9+
10+
class JsonShapeSerializer : public ShapeSerializer {
11+
public:
12+
JsonShapeSerializer();
13+
~JsonShapeSerializer();
14+
15+
void BeginStructure(const Schema& schema) override;
16+
void EndStructure() override;
17+
18+
void WriteBoolean(const Schema& schema, bool value) override;
19+
void WriteInteger(const Schema& schema, int value) override;
20+
void WriteLong(const Schema& schema, int64_t value) override;
21+
void WriteDouble(const Schema& schema, double value) override;
22+
void WriteString(const Schema& schema, const Aws::String& value) override;
23+
void WriteTimestamp(const Schema& schema, const Aws::Utils::DateTime& value) override;
24+
void WriteBlob(const Schema& schema, const Aws::Utils::ByteBuffer& value) override;
25+
void WriteEnum(const Schema& schema, int value) override;
26+
void WriteNull(const Schema& schema) override;
27+
28+
void BeginList(const Schema& schema, size_t count) override;
29+
void EndList() override;
30+
31+
void BeginMap(const Schema& schema, size_t count) override;
32+
void WriteMapKey(const Aws::String& key) override;
33+
void EndMap() override;
34+
35+
void BeginNestedStructure(const Schema& schema) override;
36+
void EndNestedStructure() override;
37+
38+
Aws::String GetPayload() const;
39+
40+
private:
41+
struct Impl;
42+
std::unique_ptr<Impl> m_impl;
43+
};
44+
45+
} // namespace schema
46+
} // namespace smithy
Lines changed: 41 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1,48 +1,46 @@
11
#pragma once
22

33
#include <smithy/client/schema/ShapeSerializer.h>
4-
#include <aws/core/utils/memory/stl/AWSStringStream.h>
5-
#include <aws/core/utils/memory/stl/AWSVector.h>
4+
5+
#include <memory>
66

77
namespace smithy {
8-
namespace schema {
9-
class QueryShapeSerializer : public ShapeSerializer {
10-
public:
11-
QueryShapeSerializer(const Aws::String& action, const Aws::Crt::String& version);
12-
13-
void BeginStructure(const Schema& schema) override;
14-
void EndStructure() override;
15-
16-
void WriteBoolean(const FieldSchema& field, bool value) override;
17-
void WriteInteger(const FieldSchema& field, int value) override;
18-
void WriteLong(const FieldSchema& field, int64_t value) override;
19-
void WriteDouble(const FieldSchema& field, double value) override;
20-
void WriteString(const FieldSchema& field, const Aws::String& value) override;
21-
void WriteTimestamp(const FieldSchema& field, const Aws::Utils::DateTime& value) override;
22-
void WriteBlob(const FieldSchema& field, const Aws::Utils::ByteBuffer& value) override;
23-
void WriteEnum(const FieldSchema& field, int value) override;
24-
void WriteNull(const FieldSchema& field) override;
25-
26-
void BeginList(const FieldSchema& field, size_t count) override;
27-
void EndList() override;
28-
29-
void BeginMap(const FieldSchema& field,size_t count) override;
30-
void WriteMapKey(const Aws::String& key) override;
31-
void EndMap() override;
32-
33-
void BeginNestedStructure(const FieldSchema& field) override;
34-
void EndNestedStructure() override;
35-
36-
Aws::String GetPayload() const;
37-
38-
private:
39-
void AppendParam(const Aws::String& key, const Aws::String& value);
40-
Aws::String CurrentPrefix() const();
41-
42-
Aws::StringStream m_ss;
43-
Aws::Vector<Aws::String> m_prefixStack;
44-
int m_listIndex = 0;
45-
int m_mapIndex = 0;
46-
};
47-
}
48-
}
8+
namespace schema {
9+
10+
class QueryShapeSerializer : public ShapeSerializer {
11+
public:
12+
QueryShapeSerializer(const Aws::String& action, const Aws::String& version);
13+
~QueryShapeSerializer();
14+
15+
void BeginStructure(const Schema& schema) override;
16+
void EndStructure() override;
17+
18+
void WriteBoolean(const Schema& schema, bool value) override;
19+
void WriteInteger(const Schema& schema, int value) override;
20+
void WriteLong(const Schema& schema, int64_t value) override;
21+
void WriteDouble(const Schema& schema, double value) override;
22+
void WriteString(const Schema& schema, const Aws::String& value) override;
23+
void WriteTimestamp(const Schema& schema, const Aws::Utils::DateTime& value) override;
24+
void WriteBlob(const Schema& schema, const Aws::Utils::ByteBuffer& value) override;
25+
void WriteEnum(const Schema& schema, int value) override;
26+
void WriteNull(const Schema& schema) override;
27+
28+
void BeginList(const Schema& schema, size_t count) override;
29+
void EndList() override;
30+
31+
void BeginMap(const Schema& schema, size_t count) override;
32+
void WriteMapKey(const Aws::String& key) override;
33+
void EndMap() override;
34+
35+
void BeginNestedStructure(const Schema& schema) override;
36+
void EndNestedStructure() override;
37+
38+
Aws::String GetPayload() const;
39+
40+
private:
41+
struct Impl;
42+
std::unique_ptr<Impl> m_impl;
43+
};
44+
45+
} // namespace schema
46+
} // namespace smithy

0 commit comments

Comments
 (0)