Skip to content

Commit b88ba8e

Browse files
committed
Map directly to types instead of names
1 parent d0c8ed4 commit b88ba8e

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

45 files changed

+1337
-1146
lines changed

include/Validation.h

Lines changed: 20 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,11 @@
1111

1212
namespace graphql::service {
1313

14-
using ValidateType = std::shared_ptr<schema::BaseType>;
14+
using ValidateType = std::optional<std::reference_wrapper<const schema::BaseType>>;
15+
using SharedType = std::shared_ptr<const schema::BaseType>;
16+
17+
SharedType getSharedType(const ValidateType& type) noexcept;
18+
ValidateType getValidateType(const SharedType& type) noexcept;
1519

1620
struct ValidateArgument
1721
{
@@ -122,25 +126,26 @@ using ValidateFieldArguments = std::map<std::string_view, ValidateArgumentValueP
122126

123127
struct ValidateField
124128
{
125-
ValidateField(std::string&& returnType, std::optional<std::string_view> objectType,
126-
std::string_view fieldName, ValidateFieldArguments&& arguments);
129+
ValidateField(ValidateType&& returnType, ValidateType&& objectType, std::string_view fieldName,
130+
ValidateFieldArguments&& arguments);
127131

128132
bool operator==(const ValidateField& other) const;
129133

130-
std::string returnType;
131-
std::optional<std::string_view> objectType;
134+
ValidateType returnType;
135+
ValidateType objectType;
132136
std::string_view fieldName;
133137
ValidateFieldArguments arguments;
134138
};
135139

136-
using ValidateTypeKinds = std::map<std::string_view, introspection::TypeKind>;
140+
using ValidateTypes = std::map<std::string_view, ValidateType>;
137141

138142
// ValidateVariableTypeVisitor visits the AST and builds a ValidateType structure representing
139143
// a variable type in an operation definition as if it came from an Introspection query.
140144
class ValidateVariableTypeVisitor
141145
{
142146
public:
143-
ValidateVariableTypeVisitor(const std::shared_ptr<schema::Schema>& schema, const ValidateTypeKinds& typeKinds);
147+
ValidateVariableTypeVisitor(
148+
const std::shared_ptr<schema::Schema>& schema, const ValidateTypes& types);
144149

145150
void visit(const peg::ast_node& typeName);
146151

@@ -153,7 +158,7 @@ class ValidateVariableTypeVisitor
153158
void visitNonNullType(const peg::ast_node& nonNullType);
154159

155160
const std::shared_ptr<schema::Schema>& _schema;
156-
const ValidateTypeKinds& _typeKinds;
161+
const ValidateTypes& _types;
157162

158163
bool _isInputType = false;
159164
ValidateType _variableType;
@@ -171,16 +176,15 @@ class ValidateExecutableVisitor
171176
std::vector<schema_error> getStructuredErrors();
172177

173178
private:
174-
static ValidateTypeFieldArguments getArguments(const std::vector<std::shared_ptr<schema::InputValue>>& args);
179+
static ValidateTypeFieldArguments getArguments(
180+
const std::vector<std::shared_ptr<const schema::InputValue>>& args);
175181

176182
using FieldTypes = std::map<std::string_view, ValidateTypeField>;
177183
using TypeFields = std::map<std::string_view, FieldTypes>;
178184
using InputFieldTypes = ValidateTypeFieldArguments;
179185
using InputTypeFields = std::map<std::string_view, InputFieldTypes>;
180186
using EnumValues = std::map<std::string_view, std::set<std::string_view>>;
181187

182-
std::optional<introspection::TypeKind> getTypeKind(std::string_view name) const;
183-
std::optional<introspection::TypeKind> getScopedTypeKind() const;
184188
constexpr bool isScalarType(introspection::TypeKind kind);
185189

186190
bool matchesScopedType(std::string_view name) const;
@@ -190,10 +194,9 @@ class ValidateExecutableVisitor
190194
static const ValidateType& getValidateFieldType(const FieldTypes::mapped_type& value);
191195
static const ValidateType& getValidateFieldType(const InputFieldTypes::mapped_type& value);
192196
template <class _FieldTypes>
193-
static std::string_view getFieldType(const _FieldTypes& fields, std::string_view name);
197+
static ValidateType getFieldType(const _FieldTypes& fields, std::string_view name);
194198
template <class _FieldTypes>
195-
static std::string getWrappedFieldType(const _FieldTypes& fields, std::string_view name);
196-
static std::string getWrappedFieldType(const ValidateType& returnType);
199+
static ValidateType getWrappedFieldType(const _FieldTypes& fields, std::string_view name);
197200

198201
void visitFragmentDefinition(const peg::ast_node& fragmentDefinition);
199202
void visitOperationDefinition(const peg::ast_node& operationDefinition);
@@ -215,7 +218,6 @@ class ValidateExecutableVisitor
215218
const std::shared_ptr<schema::Schema> _schema;
216219
std::vector<schema_error> _errors;
217220

218-
using OperationTypes = std::map<std::string_view, std::string_view>;
219221
using Directives = std::map<std::string_view, ValidateDirective>;
220222
using ExecutableNodes = std::map<std::string_view, const peg::ast_node&>;
221223
using FragmentSet = std::unordered_set<std::string_view>;
@@ -227,8 +229,8 @@ class ValidateExecutableVisitor
227229
using VariableSet = std::set<std::string_view>;
228230

229231
// These members store Introspection schema information which does not change between queries.
230-
OperationTypes _operationTypes;
231-
ValidateTypeKinds _typeKinds;
232+
ValidateTypes _operationTypes;
233+
ValidateTypes _types;
232234
MatchingTypes _matchingTypes;
233235
Directives _directives;
234236
EnumValues _enumValues;
@@ -249,7 +251,7 @@ class ValidateExecutableVisitor
249251
size_t _fieldCount = 0;
250252
TypeFields _typeFields;
251253
InputTypeFields _inputTypeFields;
252-
std::string_view _scopedType;
254+
ValidateType _scopedType;
253255
std::map<std::string_view, ValidateField> _selectionFields;
254256
};
255257

0 commit comments

Comments
 (0)