AWS SDK for C++

AWS SDK for C++ Version 1.11.926

Loading...
Searching...
No Matches
Schema.h
1#pragma once
2
3#include <aws/core/utils/memory/stl/AWSString.h>
4#include <aws/crt/Optional.h>
5#include <smithy/Smithy_EXPORTS.h>
6#include <smithy/client/schema/TraitMap.h>
7
8#include <cstdint>
9#include <initializer_list>
10#include <memory>
11
12namespace smithy {
13namespace schema {
14
15class SchemaBuilder;
16
17enum class ShapeType : uint8_t {
18 Null,
19 Boolean,
20 Byte,
21 Short,
22 Integer,
23 Long,
24 Float,
25 Double,
28 String,
29 Enum,
30 IntEnum,
31 Blob,
34 List,
35 Map,
37 Union,
41};
42
43// A single trait supplied at construction time.
44struct TraitEntry {
46 std::shared_ptr<const Trait> value;
47};
48using TraitList = std::initializer_list<TraitEntry>;
49
50// Abstract, immutable description of a shape. Concrete variants are created
51// through the factories below and SchemaBuilder.
52class SMITHY_API Schema {
53 public:
54 virtual ~Schema() = default;
55
56 virtual ShapeType GetType() const = 0;
57 virtual const char* GetId() const = 0;
58
59 virtual bool IsMember() const { return false; }
60 virtual Aws::String GetMemberName() const { return {}; }
61 virtual int GetMemberIndex() const { return 0; }
62 virtual Aws::Crt::Optional<std::shared_ptr<const Schema>> GetMemberTarget() const { return {}; }
63
64 virtual Aws::Crt::Optional<std::shared_ptr<const Schema>> GetMember(const char* /*name*/) const { return {}; }
65 virtual Aws::Crt::Optional<std::shared_ptr<const Schema>> GetMember(int /*index*/) const { return {}; }
66 virtual uint16_t GetMemberCount() const { return 0; }
67
68 template <typename T>
69 std::shared_ptr<const T> GetTrait(const TraitKey<T>& key) const {
70 return m_traits.Get(key);
71 }
72
73 bool HasTrait(const TraitKeyBase& key) const { return m_traits.Has(key); }
74
75 // Scalar factories.
76 static std::shared_ptr<const Schema> CreateBoolean(const char* id, TraitList traits = {});
77 static std::shared_ptr<const Schema> CreateByte(const char* id, TraitList traits = {});
78 static std::shared_ptr<const Schema> CreateShort(const char* id, TraitList traits = {});
79 static std::shared_ptr<const Schema> CreateInteger(const char* id, TraitList traits = {});
80 static std::shared_ptr<const Schema> CreateLong(const char* id, TraitList traits = {});
81 static std::shared_ptr<const Schema> CreateFloat(const char* id, TraitList traits = {});
82 static std::shared_ptr<const Schema> CreateDouble(const char* id, TraitList traits = {});
83 static std::shared_ptr<const Schema> CreateBigInteger(const char* id, TraitList traits = {});
84 static std::shared_ptr<const Schema> CreateBigDecimal(const char* id, TraitList traits = {});
85 static std::shared_ptr<const Schema> CreateString(const char* id, TraitList traits = {});
86 static std::shared_ptr<const Schema> CreateEnum(const char* id, TraitList traits = {});
87 static std::shared_ptr<const Schema> CreateIntEnum(const char* id, TraitList traits = {});
88 static std::shared_ptr<const Schema> CreateBlob(const char* id, TraitList traits = {});
89 static std::shared_ptr<const Schema> CreateTimestamp(const char* id, TraitList traits = {});
90 static std::shared_ptr<const Schema> CreateDocument(const char* id, TraitList traits = {});
91
92 // Standalone member node targeting an (otherwise empty) shape of targetType.
93 static std::shared_ptr<const Schema> CreateMember(const char* name, ShapeType targetType, TraitList traits = {});
94
95 // Aggregate builders.
96 static SchemaBuilder StructureBuilder(const char* id, TraitList traits = {});
97 static SchemaBuilder UnionBuilder(const char* id, TraitList traits = {});
98 static SchemaBuilder ListBuilder(const char* id, TraitList traits = {});
99 static SchemaBuilder MapBuilder(const char* id, TraitList traits = {});
100
101 protected:
102 Schema() = default;
103 explicit Schema(TraitList traits);
104
106
107 private:
108 Schema(const Schema&) = delete;
109 Schema& operator=(const Schema&) = delete;
110};
111
112} // namespace schema
113} // namespace smithy
static std::shared_ptr< const Schema > CreateDocument(const char *id, TraitList traits={})
static std::shared_ptr< const Schema > CreateString(const char *id, TraitList traits={})
virtual ~Schema()=default
static SchemaBuilder ListBuilder(const char *id, TraitList traits={})
virtual ShapeType GetType() const =0
virtual Aws::Crt::Optional< std::shared_ptr< const Schema > > GetMemberTarget() const
Definition Schema.h:62
virtual uint16_t GetMemberCount() const
Definition Schema.h:66
static std::shared_ptr< const Schema > CreateBigDecimal(const char *id, TraitList traits={})
static std::shared_ptr< const Schema > CreateBlob(const char *id, TraitList traits={})
static std::shared_ptr< const Schema > CreateFloat(const char *id, TraitList traits={})
static std::shared_ptr< const Schema > CreateEnum(const char *id, TraitList traits={})
static std::shared_ptr< const Schema > CreateInteger(const char *id, TraitList traits={})
static std::shared_ptr< const Schema > CreateByte(const char *id, TraitList traits={})
virtual int GetMemberIndex() const
Definition Schema.h:61
static std::shared_ptr< const Schema > CreateLong(const char *id, TraitList traits={})
virtual Aws::Crt::Optional< std::shared_ptr< const Schema > > GetMember(const char *) const
Definition Schema.h:64
virtual const char * GetId() const =0
virtual Aws::String GetMemberName() const
Definition Schema.h:60
std::shared_ptr< const T > GetTrait(const TraitKey< T > &key) const
Definition Schema.h:69
static std::shared_ptr< const Schema > CreateTimestamp(const char *id, TraitList traits={})
static std::shared_ptr< const Schema > CreateBoolean(const char *id, TraitList traits={})
static SchemaBuilder MapBuilder(const char *id, TraitList traits={})
Schema(TraitList traits)
static SchemaBuilder UnionBuilder(const char *id, TraitList traits={})
static std::shared_ptr< const Schema > CreateIntEnum(const char *id, TraitList traits={})
static std::shared_ptr< const Schema > CreateMember(const char *name, ShapeType targetType, TraitList traits={})
static std::shared_ptr< const Schema > CreateBigInteger(const char *id, TraitList traits={})
static SchemaBuilder StructureBuilder(const char *id, TraitList traits={})
static std::shared_ptr< const Schema > CreateShort(const char *id, TraitList traits={})
virtual bool IsMember() const
Definition Schema.h:59
static std::shared_ptr< const Schema > CreateDouble(const char *id, TraitList traits={})
virtual Aws::Crt::Optional< std::shared_ptr< const Schema > > GetMember(int) const
Definition Schema.h:65
bool HasTrait(const TraitKeyBase &key) const
Definition Schema.h:73
std::basic_string< char, std::char_traits< char >, Aws::Allocator< char > > String
Definition AWSString.h:97
std::initializer_list< TraitEntry > TraitList
Definition Schema.h:48
Definition Schema.h:44
std::shared_ptr< const Trait > value
Definition Schema.h:46
const TraitKeyBase & key
Definition Schema.h:45