AWS SDK for C++

AWS SDK for C++ Version 1.11.887

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