rails-graphql 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (266) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.rdoc +19 -0
  4. data/Rakefile +31 -0
  5. data/ext/depend +3 -0
  6. data/ext/extconf.rb +57 -0
  7. data/ext/graphqlparser/Ast.cpp +346 -0
  8. data/ext/graphqlparser/Ast.h +1214 -0
  9. data/ext/graphqlparser/AstNode.h +36 -0
  10. data/ext/graphqlparser/AstVisitor.h +137 -0
  11. data/ext/graphqlparser/GraphQLParser.cpp +76 -0
  12. data/ext/graphqlparser/GraphQLParser.h +55 -0
  13. data/ext/graphqlparser/JsonVisitor.cpp +161 -0
  14. data/ext/graphqlparser/JsonVisitor.cpp.inc +456 -0
  15. data/ext/graphqlparser/JsonVisitor.h +121 -0
  16. data/ext/graphqlparser/JsonVisitor.h.inc +110 -0
  17. data/ext/graphqlparser/VERSION +1 -0
  18. data/ext/graphqlparser/c/GraphQLAst.cpp +324 -0
  19. data/ext/graphqlparser/c/GraphQLAst.h +180 -0
  20. data/ext/graphqlparser/c/GraphQLAstForEachConcreteType.h +44 -0
  21. data/ext/graphqlparser/c/GraphQLAstNode.cpp +25 -0
  22. data/ext/graphqlparser/c/GraphQLAstNode.h +33 -0
  23. data/ext/graphqlparser/c/GraphQLAstToJSON.cpp +21 -0
  24. data/ext/graphqlparser/c/GraphQLAstToJSON.h +24 -0
  25. data/ext/graphqlparser/c/GraphQLAstVisitor.cpp +55 -0
  26. data/ext/graphqlparser/c/GraphQLAstVisitor.h +53 -0
  27. data/ext/graphqlparser/c/GraphQLParser.cpp +35 -0
  28. data/ext/graphqlparser/c/GraphQLParser.h +54 -0
  29. data/ext/graphqlparser/dump_json_ast.cpp +48 -0
  30. data/ext/graphqlparser/lexer.lpp +324 -0
  31. data/ext/graphqlparser/parser.ypp +693 -0
  32. data/ext/graphqlparser/parsergen/lexer.cpp +2633 -0
  33. data/ext/graphqlparser/parsergen/lexer.h +528 -0
  34. data/ext/graphqlparser/parsergen/location.hh +189 -0
  35. data/ext/graphqlparser/parsergen/parser.tab.cpp +3300 -0
  36. data/ext/graphqlparser/parsergen/parser.tab.hpp +646 -0
  37. data/ext/graphqlparser/parsergen/position.hh +179 -0
  38. data/ext/graphqlparser/parsergen/stack.hh +156 -0
  39. data/ext/graphqlparser/syntaxdefs.h +19 -0
  40. data/ext/libgraphqlparser/AstNode.h +36 -0
  41. data/ext/libgraphqlparser/CMakeLists.txt +148 -0
  42. data/ext/libgraphqlparser/CONTRIBUTING.md +23 -0
  43. data/ext/libgraphqlparser/GraphQLParser.cpp +76 -0
  44. data/ext/libgraphqlparser/GraphQLParser.h +55 -0
  45. data/ext/libgraphqlparser/JsonVisitor.cpp +161 -0
  46. data/ext/libgraphqlparser/JsonVisitor.h +121 -0
  47. data/ext/libgraphqlparser/LICENSE +22 -0
  48. data/ext/libgraphqlparser/README.clang-tidy +7 -0
  49. data/ext/libgraphqlparser/README.md +84 -0
  50. data/ext/libgraphqlparser/ast/ast.ast +203 -0
  51. data/ext/libgraphqlparser/ast/ast.py +61 -0
  52. data/ext/libgraphqlparser/ast/c.py +100 -0
  53. data/ext/libgraphqlparser/ast/c.pyc +0 -0
  54. data/ext/libgraphqlparser/ast/c_impl.py +61 -0
  55. data/ext/libgraphqlparser/ast/c_impl.pyc +0 -0
  56. data/ext/libgraphqlparser/ast/c_visitor_impl.py +39 -0
  57. data/ext/libgraphqlparser/ast/c_visitor_impl.pyc +0 -0
  58. data/ext/libgraphqlparser/ast/casing.py +26 -0
  59. data/ext/libgraphqlparser/ast/casing.pyc +0 -0
  60. data/ext/libgraphqlparser/ast/cxx.py +197 -0
  61. data/ext/libgraphqlparser/ast/cxx.pyc +0 -0
  62. data/ext/libgraphqlparser/ast/cxx_impl.py +61 -0
  63. data/ext/libgraphqlparser/ast/cxx_impl.pyc +0 -0
  64. data/ext/libgraphqlparser/ast/cxx_json_visitor_header.py +42 -0
  65. data/ext/libgraphqlparser/ast/cxx_json_visitor_header.pyc +0 -0
  66. data/ext/libgraphqlparser/ast/cxx_json_visitor_impl.py +80 -0
  67. data/ext/libgraphqlparser/ast/cxx_json_visitor_impl.pyc +0 -0
  68. data/ext/libgraphqlparser/ast/cxx_visitor.py +64 -0
  69. data/ext/libgraphqlparser/ast/cxx_visitor.pyc +0 -0
  70. data/ext/libgraphqlparser/ast/js.py +65 -0
  71. data/ext/libgraphqlparser/ast/license.py +10 -0
  72. data/ext/libgraphqlparser/ast/license.pyc +0 -0
  73. data/ext/libgraphqlparser/c/GraphQLAstNode.cpp +25 -0
  74. data/ext/libgraphqlparser/c/GraphQLAstNode.h +33 -0
  75. data/ext/libgraphqlparser/c/GraphQLAstToJSON.cpp +21 -0
  76. data/ext/libgraphqlparser/c/GraphQLAstToJSON.h +24 -0
  77. data/ext/libgraphqlparser/c/GraphQLAstVisitor.cpp +55 -0
  78. data/ext/libgraphqlparser/c/GraphQLAstVisitor.h +53 -0
  79. data/ext/libgraphqlparser/c/GraphQLParser.cpp +35 -0
  80. data/ext/libgraphqlparser/c/GraphQLParser.h +54 -0
  81. data/ext/libgraphqlparser/clang-tidy-all.sh +3 -0
  82. data/ext/libgraphqlparser/cmake/version.cmake +16 -0
  83. data/ext/libgraphqlparser/dump_json_ast.cpp +48 -0
  84. data/ext/libgraphqlparser/go/README.md +20 -0
  85. data/ext/libgraphqlparser/go/callbacks.go +18 -0
  86. data/ext/libgraphqlparser/go/gotest.go +64 -0
  87. data/ext/libgraphqlparser/lexer.lpp +324 -0
  88. data/ext/libgraphqlparser/libgraphqlparser.pc.in +11 -0
  89. data/ext/libgraphqlparser/parser.ypp +693 -0
  90. data/ext/libgraphqlparser/parsergen/lexer.cpp +2633 -0
  91. data/ext/libgraphqlparser/parsergen/lexer.h +528 -0
  92. data/ext/libgraphqlparser/parsergen/location.hh +189 -0
  93. data/ext/libgraphqlparser/parsergen/parser.tab.cpp +3300 -0
  94. data/ext/libgraphqlparser/parsergen/parser.tab.hpp +646 -0
  95. data/ext/libgraphqlparser/parsergen/position.hh +179 -0
  96. data/ext/libgraphqlparser/parsergen/stack.hh +156 -0
  97. data/ext/libgraphqlparser/python/CMakeLists.txt +14 -0
  98. data/ext/libgraphqlparser/python/README.md +5 -0
  99. data/ext/libgraphqlparser/python/example.py +31 -0
  100. data/ext/libgraphqlparser/syntaxdefs.h +19 -0
  101. data/ext/libgraphqlparser/test/BuildCAPI.c +5 -0
  102. data/ext/libgraphqlparser/test/CMakeLists.txt +25 -0
  103. data/ext/libgraphqlparser/test/JsonVisitorTests.cpp +28 -0
  104. data/ext/libgraphqlparser/test/ParserTests.cpp +352 -0
  105. data/ext/libgraphqlparser/test/kitchen-sink.graphql +59 -0
  106. data/ext/libgraphqlparser/test/kitchen-sink.json +1 -0
  107. data/ext/libgraphqlparser/test/schema-kitchen-sink.graphql +78 -0
  108. data/ext/libgraphqlparser/test/schema-kitchen-sink.json +1 -0
  109. data/ext/libgraphqlparser/test/valgrind.supp +33 -0
  110. data/ext/version.cpp +21 -0
  111. data/lib/generators/graphql/controller_generator.rb +22 -0
  112. data/lib/generators/graphql/schema_generator.rb +22 -0
  113. data/lib/generators/graphql/templates/controller.erb +5 -0
  114. data/lib/generators/graphql/templates/schema.erb +6 -0
  115. data/lib/graphqlparser.so +0 -0
  116. data/lib/rails-graphql.rb +2 -0
  117. data/lib/rails/graphql.rake +1 -0
  118. data/lib/rails/graphql.rb +185 -0
  119. data/lib/rails/graphql/adapters/mysql_adapter.rb +0 -0
  120. data/lib/rails/graphql/adapters/pg_adapter.rb +50 -0
  121. data/lib/rails/graphql/adapters/sqlite_adapter.rb +39 -0
  122. data/lib/rails/graphql/argument.rb +220 -0
  123. data/lib/rails/graphql/callback.rb +124 -0
  124. data/lib/rails/graphql/collectors.rb +14 -0
  125. data/lib/rails/graphql/collectors/hash_collector.rb +83 -0
  126. data/lib/rails/graphql/collectors/idented_collector.rb +73 -0
  127. data/lib/rails/graphql/collectors/json_collector.rb +114 -0
  128. data/lib/rails/graphql/config.rb +61 -0
  129. data/lib/rails/graphql/directive.rb +203 -0
  130. data/lib/rails/graphql/directive/deprecated_directive.rb +59 -0
  131. data/lib/rails/graphql/directive/include_directive.rb +24 -0
  132. data/lib/rails/graphql/directive/skip_directive.rb +24 -0
  133. data/lib/rails/graphql/errors.rb +42 -0
  134. data/lib/rails/graphql/event.rb +141 -0
  135. data/lib/rails/graphql/field.rb +318 -0
  136. data/lib/rails/graphql/field/input_field.rb +92 -0
  137. data/lib/rails/graphql/field/mutation_field.rb +52 -0
  138. data/lib/rails/graphql/field/output_field.rb +96 -0
  139. data/lib/rails/graphql/field/proxied_field.rb +131 -0
  140. data/lib/rails/graphql/field/resolved_field.rb +96 -0
  141. data/lib/rails/graphql/field/scoped_config.rb +22 -0
  142. data/lib/rails/graphql/field/typed_field.rb +104 -0
  143. data/lib/rails/graphql/helpers.rb +40 -0
  144. data/lib/rails/graphql/helpers/attribute_delegator.rb +39 -0
  145. data/lib/rails/graphql/helpers/inherited_collection.rb +152 -0
  146. data/lib/rails/graphql/helpers/leaf_from_ar.rb +141 -0
  147. data/lib/rails/graphql/helpers/registerable.rb +103 -0
  148. data/lib/rails/graphql/helpers/with_arguments.rb +125 -0
  149. data/lib/rails/graphql/helpers/with_assignment.rb +113 -0
  150. data/lib/rails/graphql/helpers/with_callbacks.rb +55 -0
  151. data/lib/rails/graphql/helpers/with_directives.rb +126 -0
  152. data/lib/rails/graphql/helpers/with_events.rb +81 -0
  153. data/lib/rails/graphql/helpers/with_fields.rb +141 -0
  154. data/lib/rails/graphql/helpers/with_namespace.rb +40 -0
  155. data/lib/rails/graphql/helpers/with_owner.rb +35 -0
  156. data/lib/rails/graphql/helpers/with_schema_fields.rb +230 -0
  157. data/lib/rails/graphql/helpers/with_validator.rb +52 -0
  158. data/lib/rails/graphql/introspection.rb +53 -0
  159. data/lib/rails/graphql/native.rb +56 -0
  160. data/lib/rails/graphql/native/functions.rb +38 -0
  161. data/lib/rails/graphql/native/location.rb +41 -0
  162. data/lib/rails/graphql/native/pointers.rb +23 -0
  163. data/lib/rails/graphql/native/visitor.rb +349 -0
  164. data/lib/rails/graphql/railtie.rb +85 -0
  165. data/lib/rails/graphql/railties/base_generator.rb +35 -0
  166. data/lib/rails/graphql/railties/controller.rb +101 -0
  167. data/lib/rails/graphql/railties/controller_runtime.rb +40 -0
  168. data/lib/rails/graphql/railties/log_subscriber.rb +62 -0
  169. data/lib/rails/graphql/request.rb +343 -0
  170. data/lib/rails/graphql/request/arguments.rb +93 -0
  171. data/lib/rails/graphql/request/component.rb +100 -0
  172. data/lib/rails/graphql/request/component/field.rb +225 -0
  173. data/lib/rails/graphql/request/component/fragment.rb +118 -0
  174. data/lib/rails/graphql/request/component/operation.rb +178 -0
  175. data/lib/rails/graphql/request/component/operation/subscription.rb +16 -0
  176. data/lib/rails/graphql/request/component/spread.rb +119 -0
  177. data/lib/rails/graphql/request/component/typename.rb +82 -0
  178. data/lib/rails/graphql/request/context.rb +51 -0
  179. data/lib/rails/graphql/request/errors.rb +54 -0
  180. data/lib/rails/graphql/request/event.rb +112 -0
  181. data/lib/rails/graphql/request/helpers/directives.rb +64 -0
  182. data/lib/rails/graphql/request/helpers/selection_set.rb +87 -0
  183. data/lib/rails/graphql/request/helpers/value_writers.rb +115 -0
  184. data/lib/rails/graphql/request/steps/organizable.rb +146 -0
  185. data/lib/rails/graphql/request/steps/prepareable.rb +33 -0
  186. data/lib/rails/graphql/request/steps/resolveable.rb +32 -0
  187. data/lib/rails/graphql/request/strategy.rb +249 -0
  188. data/lib/rails/graphql/request/strategy/dynamic_instance.rb +41 -0
  189. data/lib/rails/graphql/request/strategy/multi_query_strategy.rb +36 -0
  190. data/lib/rails/graphql/request/strategy/sequenced_strategy.rb +28 -0
  191. data/lib/rails/graphql/schema.rb +272 -0
  192. data/lib/rails/graphql/shortcuts.rb +77 -0
  193. data/lib/rails/graphql/source.rb +371 -0
  194. data/lib/rails/graphql/source/active_record/builders.rb +154 -0
  195. data/lib/rails/graphql/source/active_record_source.rb +231 -0
  196. data/lib/rails/graphql/source/scoped_arguments.rb +87 -0
  197. data/lib/rails/graphql/to_gql.rb +368 -0
  198. data/lib/rails/graphql/type.rb +138 -0
  199. data/lib/rails/graphql/type/enum.rb +206 -0
  200. data/lib/rails/graphql/type/enum/directive_location_enum.rb +30 -0
  201. data/lib/rails/graphql/type/enum/type_kind_enum.rb +57 -0
  202. data/lib/rails/graphql/type/input.rb +134 -0
  203. data/lib/rails/graphql/type/interface.rb +82 -0
  204. data/lib/rails/graphql/type/object.rb +111 -0
  205. data/lib/rails/graphql/type/object/directive_object.rb +34 -0
  206. data/lib/rails/graphql/type/object/enum_value_object.rb +25 -0
  207. data/lib/rails/graphql/type/object/field_object.rb +54 -0
  208. data/lib/rails/graphql/type/object/input_value_object.rb +49 -0
  209. data/lib/rails/graphql/type/object/schema_object.rb +40 -0
  210. data/lib/rails/graphql/type/object/type_object.rb +136 -0
  211. data/lib/rails/graphql/type/scalar.rb +71 -0
  212. data/lib/rails/graphql/type/scalar/bigint_scalar.rb +34 -0
  213. data/lib/rails/graphql/type/scalar/binary_scalar.rb +30 -0
  214. data/lib/rails/graphql/type/scalar/boolean_scalar.rb +37 -0
  215. data/lib/rails/graphql/type/scalar/date_scalar.rb +34 -0
  216. data/lib/rails/graphql/type/scalar/date_time_scalar.rb +32 -0
  217. data/lib/rails/graphql/type/scalar/decimal_scalar.rb +35 -0
  218. data/lib/rails/graphql/type/scalar/float_scalar.rb +32 -0
  219. data/lib/rails/graphql/type/scalar/id_scalar.rb +39 -0
  220. data/lib/rails/graphql/type/scalar/int_scalar.rb +36 -0
  221. data/lib/rails/graphql/type/scalar/string_scalar.rb +28 -0
  222. data/lib/rails/graphql/type/scalar/time_scalar.rb +40 -0
  223. data/lib/rails/graphql/type/union.rb +87 -0
  224. data/lib/rails/graphql/type_map.rb +347 -0
  225. data/lib/rails/graphql/version.rb +7 -0
  226. data/test/assets/introspection-db.json +0 -0
  227. data/test/assets/introspection-mem.txt +1 -0
  228. data/test/assets/introspection.gql +91 -0
  229. data/test/assets/luke.jpg +0 -0
  230. data/test/assets/mem.gql +428 -0
  231. data/test/assets/sqlite.gql +423 -0
  232. data/test/config.rb +80 -0
  233. data/test/graphql/request/context_test.rb +70 -0
  234. data/test/graphql/schema_test.rb +190 -0
  235. data/test/graphql/source_test.rb +237 -0
  236. data/test/graphql/type/enum_test.rb +203 -0
  237. data/test/graphql/type/input_test.rb +138 -0
  238. data/test/graphql/type/interface_test.rb +72 -0
  239. data/test/graphql/type/object_test.rb +104 -0
  240. data/test/graphql/type/scalar/bigint_scalar_test.rb +42 -0
  241. data/test/graphql/type/scalar/binary_scalar_test.rb +17 -0
  242. data/test/graphql/type/scalar/boolean_scalar_test.rb +40 -0
  243. data/test/graphql/type/scalar/date_scalar_test.rb +29 -0
  244. data/test/graphql/type/scalar/date_time_scalar_test.rb +29 -0
  245. data/test/graphql/type/scalar/decimal_scalar_test.rb +28 -0
  246. data/test/graphql/type/scalar/float_scalar_test.rb +22 -0
  247. data/test/graphql/type/scalar/id_scalar_test.rb +26 -0
  248. data/test/graphql/type/scalar/int_scalar_test.rb +26 -0
  249. data/test/graphql/type/scalar/string_scalar_test.rb +17 -0
  250. data/test/graphql/type/scalar/time_scalar_test.rb +36 -0
  251. data/test/graphql/type/scalar_test.rb +45 -0
  252. data/test/graphql/type/union_test.rb +82 -0
  253. data/test/graphql/type_map_test.rb +362 -0
  254. data/test/graphql/type_test.rb +68 -0
  255. data/test/graphql_test.rb +55 -0
  256. data/test/integration/config.rb +56 -0
  257. data/test/integration/memory/star_wars_introspection_test.rb +144 -0
  258. data/test/integration/memory/star_wars_query_test.rb +184 -0
  259. data/test/integration/memory/star_wars_validation_test.rb +99 -0
  260. data/test/integration/schemas/memory.rb +232 -0
  261. data/test/integration/schemas/sqlite.rb +82 -0
  262. data/test/integration/sqlite/star_wars_introspection_test.rb +15 -0
  263. data/test/integration/sqlite/star_wars_mutation_test.rb +82 -0
  264. data/test/integration/sqlite/star_wars_query_test.rb +71 -0
  265. data/test/test_ext.rb +48 -0
  266. metadata +509 -0
@@ -0,0 +1,1214 @@
1
+ /**
2
+ * Copyright 2019-present GraphQL Foundation
3
+ * This source code is licensed under the MIT license found in the
4
+ * LICENSE file in the root directory of this source tree.
5
+ */
6
+ /** @generated */
7
+ #pragma once
8
+
9
+ #include "AstNode.h"
10
+
11
+ #include <memory>
12
+ #include <string>
13
+ #include <utility>
14
+ #include <vector>
15
+
16
+ namespace facebook {
17
+ namespace graphql {
18
+ namespace ast {
19
+
20
+ // The parser uses strdup to move from yytext to the heap, so we need
21
+ // to use free instead of delete.
22
+ struct CDeleter {
23
+ void operator()(const char *p) const { free((void *)p); }
24
+ };
25
+
26
+ class Definition;
27
+ class Document;
28
+ class OperationDefinition;
29
+ class VariableDefinition;
30
+ class SelectionSet;
31
+ class Selection;
32
+ class Field;
33
+ class Argument;
34
+ class FragmentSpread;
35
+ class InlineFragment;
36
+ class FragmentDefinition;
37
+ class Value;
38
+ class Variable;
39
+ class IntValue;
40
+ class FloatValue;
41
+ class StringValue;
42
+ class BooleanValue;
43
+ class NullValue;
44
+ class EnumValue;
45
+ class ListValue;
46
+ class ObjectValue;
47
+ class ObjectField;
48
+ class Directive;
49
+ class Type;
50
+ class NamedType;
51
+ class ListType;
52
+ class NonNullType;
53
+ class Name;
54
+ class SchemaDefinition;
55
+ class OperationTypeDefinition;
56
+ class ScalarTypeDefinition;
57
+ class ObjectTypeDefinition;
58
+ class FieldDefinition;
59
+ class InputValueDefinition;
60
+ class InterfaceTypeDefinition;
61
+ class UnionTypeDefinition;
62
+ class EnumTypeDefinition;
63
+ class EnumValueDefinition;
64
+ class InputObjectTypeDefinition;
65
+ class TypeExtensionDefinition;
66
+ class DirectiveDefinition;
67
+
68
+ class Definition : public Node {
69
+ public:
70
+ explicit Definition(
71
+ const yy::location &location
72
+
73
+ )
74
+ : Node(location)
75
+
76
+ {}
77
+ };
78
+
79
+ class Document : public Node {
80
+ std::unique_ptr<std::vector<std::unique_ptr<Definition>>> definitions_;
81
+ public:
82
+ explicit Document(
83
+ const yy::location &location,
84
+ std::vector<std::unique_ptr<Definition>> * definitions
85
+ )
86
+ : Node(location),
87
+ definitions_(definitions)
88
+ {}
89
+
90
+ ~Document() {}
91
+
92
+ Document(const Document&) = delete;
93
+ Document& operator=(const Document&) = delete;
94
+
95
+ const std::vector<std::unique_ptr<Definition>>& getDefinitions() const
96
+ { return *definitions_; }
97
+
98
+ void accept(visitor::AstVisitor *visitor) const override;
99
+ };
100
+
101
+
102
+ class OperationDefinition : public Definition {
103
+ std::unique_ptr<const char, CDeleter> operation_;
104
+ std::unique_ptr<Name> name_;
105
+ std::unique_ptr<std::vector<std::unique_ptr<VariableDefinition>>> variableDefinitions_;
106
+ std::unique_ptr<std::vector<std::unique_ptr<Directive>>> directives_;
107
+ std::unique_ptr<SelectionSet> selectionSet_;
108
+ public:
109
+ explicit OperationDefinition(
110
+ const yy::location &location,
111
+ const char * operation,
112
+ Name * name,
113
+ std::vector<std::unique_ptr<VariableDefinition>> * variableDefinitions,
114
+ std::vector<std::unique_ptr<Directive>> * directives,
115
+ SelectionSet * selectionSet
116
+ )
117
+ : Definition(location),
118
+ operation_(operation),
119
+ name_(name),
120
+ variableDefinitions_(variableDefinitions),
121
+ directives_(directives),
122
+ selectionSet_(selectionSet)
123
+ {}
124
+
125
+ ~OperationDefinition() {}
126
+
127
+ OperationDefinition(const OperationDefinition&) = delete;
128
+ OperationDefinition& operator=(const OperationDefinition&) = delete;
129
+
130
+ const char * getOperation() const
131
+ { return operation_.get(); }
132
+
133
+ const Name* getName() const
134
+ { return name_.get(); }
135
+
136
+ const std::vector<std::unique_ptr<VariableDefinition>>* getVariableDefinitions() const
137
+ { return variableDefinitions_.get(); }
138
+
139
+ const std::vector<std::unique_ptr<Directive>>* getDirectives() const
140
+ { return directives_.get(); }
141
+
142
+ const SelectionSet& getSelectionSet() const
143
+ { return *selectionSet_; }
144
+
145
+ void accept(visitor::AstVisitor *visitor) const override;
146
+ };
147
+
148
+
149
+ class VariableDefinition : public Node {
150
+ std::unique_ptr<Variable> variable_;
151
+ std::unique_ptr<Type> type_;
152
+ std::unique_ptr<Value> defaultValue_;
153
+ public:
154
+ explicit VariableDefinition(
155
+ const yy::location &location,
156
+ Variable * variable,
157
+ Type * type,
158
+ Value * defaultValue
159
+ )
160
+ : Node(location),
161
+ variable_(variable),
162
+ type_(type),
163
+ defaultValue_(defaultValue)
164
+ {}
165
+
166
+ ~VariableDefinition() {}
167
+
168
+ VariableDefinition(const VariableDefinition&) = delete;
169
+ VariableDefinition& operator=(const VariableDefinition&) = delete;
170
+
171
+ const Variable& getVariable() const
172
+ { return *variable_; }
173
+
174
+ const Type& getType() const
175
+ { return *type_; }
176
+
177
+ const Value* getDefaultValue() const
178
+ { return defaultValue_.get(); }
179
+
180
+ void accept(visitor::AstVisitor *visitor) const override;
181
+ };
182
+
183
+
184
+ class SelectionSet : public Node {
185
+ std::unique_ptr<std::vector<std::unique_ptr<Selection>>> selections_;
186
+ public:
187
+ explicit SelectionSet(
188
+ const yy::location &location,
189
+ std::vector<std::unique_ptr<Selection>> * selections
190
+ )
191
+ : Node(location),
192
+ selections_(selections)
193
+ {}
194
+
195
+ ~SelectionSet() {}
196
+
197
+ SelectionSet(const SelectionSet&) = delete;
198
+ SelectionSet& operator=(const SelectionSet&) = delete;
199
+
200
+ const std::vector<std::unique_ptr<Selection>>& getSelections() const
201
+ { return *selections_; }
202
+
203
+ void accept(visitor::AstVisitor *visitor) const override;
204
+ };
205
+
206
+
207
+ class Selection : public Node {
208
+ public:
209
+ explicit Selection(
210
+ const yy::location &location
211
+
212
+ )
213
+ : Node(location)
214
+
215
+ {}
216
+ };
217
+
218
+ class Field : public Selection {
219
+ std::unique_ptr<Name> alias_;
220
+ std::unique_ptr<Name> name_;
221
+ std::unique_ptr<std::vector<std::unique_ptr<Argument>>> arguments_;
222
+ std::unique_ptr<std::vector<std::unique_ptr<Directive>>> directives_;
223
+ std::unique_ptr<SelectionSet> selectionSet_;
224
+ public:
225
+ explicit Field(
226
+ const yy::location &location,
227
+ Name * alias,
228
+ Name * name,
229
+ std::vector<std::unique_ptr<Argument>> * arguments,
230
+ std::vector<std::unique_ptr<Directive>> * directives,
231
+ SelectionSet * selectionSet
232
+ )
233
+ : Selection(location),
234
+ alias_(alias),
235
+ name_(name),
236
+ arguments_(arguments),
237
+ directives_(directives),
238
+ selectionSet_(selectionSet)
239
+ {}
240
+
241
+ ~Field() {}
242
+
243
+ Field(const Field&) = delete;
244
+ Field& operator=(const Field&) = delete;
245
+
246
+ const Name* getAlias() const
247
+ { return alias_.get(); }
248
+
249
+ const Name& getName() const
250
+ { return *name_; }
251
+
252
+ const std::vector<std::unique_ptr<Argument>>* getArguments() const
253
+ { return arguments_.get(); }
254
+
255
+ const std::vector<std::unique_ptr<Directive>>* getDirectives() const
256
+ { return directives_.get(); }
257
+
258
+ const SelectionSet* getSelectionSet() const
259
+ { return selectionSet_.get(); }
260
+
261
+ void accept(visitor::AstVisitor *visitor) const override;
262
+ };
263
+
264
+
265
+ class Argument : public Node {
266
+ std::unique_ptr<Name> name_;
267
+ std::unique_ptr<Value> value_;
268
+ public:
269
+ explicit Argument(
270
+ const yy::location &location,
271
+ Name * name,
272
+ Value * value
273
+ )
274
+ : Node(location),
275
+ name_(name),
276
+ value_(value)
277
+ {}
278
+
279
+ ~Argument() {}
280
+
281
+ Argument(const Argument&) = delete;
282
+ Argument& operator=(const Argument&) = delete;
283
+
284
+ const Name& getName() const
285
+ { return *name_; }
286
+
287
+ const Value& getValue() const
288
+ { return *value_; }
289
+
290
+ void accept(visitor::AstVisitor *visitor) const override;
291
+ };
292
+
293
+
294
+ class FragmentSpread : public Selection {
295
+ std::unique_ptr<Name> name_;
296
+ std::unique_ptr<std::vector<std::unique_ptr<Directive>>> directives_;
297
+ public:
298
+ explicit FragmentSpread(
299
+ const yy::location &location,
300
+ Name * name,
301
+ std::vector<std::unique_ptr<Directive>> * directives
302
+ )
303
+ : Selection(location),
304
+ name_(name),
305
+ directives_(directives)
306
+ {}
307
+
308
+ ~FragmentSpread() {}
309
+
310
+ FragmentSpread(const FragmentSpread&) = delete;
311
+ FragmentSpread& operator=(const FragmentSpread&) = delete;
312
+
313
+ const Name& getName() const
314
+ { return *name_; }
315
+
316
+ const std::vector<std::unique_ptr<Directive>>* getDirectives() const
317
+ { return directives_.get(); }
318
+
319
+ void accept(visitor::AstVisitor *visitor) const override;
320
+ };
321
+
322
+
323
+ class InlineFragment : public Selection {
324
+ std::unique_ptr<NamedType> typeCondition_;
325
+ std::unique_ptr<std::vector<std::unique_ptr<Directive>>> directives_;
326
+ std::unique_ptr<SelectionSet> selectionSet_;
327
+ public:
328
+ explicit InlineFragment(
329
+ const yy::location &location,
330
+ NamedType * typeCondition,
331
+ std::vector<std::unique_ptr<Directive>> * directives,
332
+ SelectionSet * selectionSet
333
+ )
334
+ : Selection(location),
335
+ typeCondition_(typeCondition),
336
+ directives_(directives),
337
+ selectionSet_(selectionSet)
338
+ {}
339
+
340
+ ~InlineFragment() {}
341
+
342
+ InlineFragment(const InlineFragment&) = delete;
343
+ InlineFragment& operator=(const InlineFragment&) = delete;
344
+
345
+ const NamedType* getTypeCondition() const
346
+ { return typeCondition_.get(); }
347
+
348
+ const std::vector<std::unique_ptr<Directive>>* getDirectives() const
349
+ { return directives_.get(); }
350
+
351
+ const SelectionSet& getSelectionSet() const
352
+ { return *selectionSet_; }
353
+
354
+ void accept(visitor::AstVisitor *visitor) const override;
355
+ };
356
+
357
+
358
+ class FragmentDefinition : public Definition {
359
+ std::unique_ptr<Name> name_;
360
+ std::unique_ptr<NamedType> typeCondition_;
361
+ std::unique_ptr<std::vector<std::unique_ptr<Directive>>> directives_;
362
+ std::unique_ptr<SelectionSet> selectionSet_;
363
+ public:
364
+ explicit FragmentDefinition(
365
+ const yy::location &location,
366
+ Name * name,
367
+ NamedType * typeCondition,
368
+ std::vector<std::unique_ptr<Directive>> * directives,
369
+ SelectionSet * selectionSet
370
+ )
371
+ : Definition(location),
372
+ name_(name),
373
+ typeCondition_(typeCondition),
374
+ directives_(directives),
375
+ selectionSet_(selectionSet)
376
+ {}
377
+
378
+ ~FragmentDefinition() {}
379
+
380
+ FragmentDefinition(const FragmentDefinition&) = delete;
381
+ FragmentDefinition& operator=(const FragmentDefinition&) = delete;
382
+
383
+ const Name& getName() const
384
+ { return *name_; }
385
+
386
+ const NamedType& getTypeCondition() const
387
+ { return *typeCondition_; }
388
+
389
+ const std::vector<std::unique_ptr<Directive>>* getDirectives() const
390
+ { return directives_.get(); }
391
+
392
+ const SelectionSet& getSelectionSet() const
393
+ { return *selectionSet_; }
394
+
395
+ void accept(visitor::AstVisitor *visitor) const override;
396
+ };
397
+
398
+
399
+ class Value : public Node {
400
+ public:
401
+ explicit Value(
402
+ const yy::location &location
403
+
404
+ )
405
+ : Node(location)
406
+
407
+ {}
408
+ };
409
+
410
+ class Variable : public Value {
411
+ std::unique_ptr<Name> name_;
412
+ public:
413
+ explicit Variable(
414
+ const yy::location &location,
415
+ Name * name
416
+ )
417
+ : Value(location),
418
+ name_(name)
419
+ {}
420
+
421
+ ~Variable() {}
422
+
423
+ Variable(const Variable&) = delete;
424
+ Variable& operator=(const Variable&) = delete;
425
+
426
+ const Name& getName() const
427
+ { return *name_; }
428
+
429
+ void accept(visitor::AstVisitor *visitor) const override;
430
+ };
431
+
432
+
433
+ class IntValue : public Value {
434
+ std::unique_ptr<const char, CDeleter> value_;
435
+ public:
436
+ explicit IntValue(
437
+ const yy::location &location,
438
+ const char * value
439
+ )
440
+ : Value(location),
441
+ value_(value)
442
+ {}
443
+
444
+ ~IntValue() {}
445
+
446
+ IntValue(const IntValue&) = delete;
447
+ IntValue& operator=(const IntValue&) = delete;
448
+
449
+ const char * getValue() const
450
+ { return value_.get(); }
451
+
452
+ void accept(visitor::AstVisitor *visitor) const override;
453
+ };
454
+
455
+
456
+ class FloatValue : public Value {
457
+ std::unique_ptr<const char, CDeleter> value_;
458
+ public:
459
+ explicit FloatValue(
460
+ const yy::location &location,
461
+ const char * value
462
+ )
463
+ : Value(location),
464
+ value_(value)
465
+ {}
466
+
467
+ ~FloatValue() {}
468
+
469
+ FloatValue(const FloatValue&) = delete;
470
+ FloatValue& operator=(const FloatValue&) = delete;
471
+
472
+ const char * getValue() const
473
+ { return value_.get(); }
474
+
475
+ void accept(visitor::AstVisitor *visitor) const override;
476
+ };
477
+
478
+
479
+ class StringValue : public Value {
480
+ std::unique_ptr<const char, CDeleter> value_;
481
+ public:
482
+ explicit StringValue(
483
+ const yy::location &location,
484
+ const char * value
485
+ )
486
+ : Value(location),
487
+ value_(value)
488
+ {}
489
+
490
+ ~StringValue() {}
491
+
492
+ StringValue(const StringValue&) = delete;
493
+ StringValue& operator=(const StringValue&) = delete;
494
+
495
+ const char * getValue() const
496
+ { return value_.get(); }
497
+
498
+ void accept(visitor::AstVisitor *visitor) const override;
499
+ };
500
+
501
+
502
+ class BooleanValue : public Value {
503
+ bool value_;
504
+ public:
505
+ explicit BooleanValue(
506
+ const yy::location &location,
507
+ bool value
508
+ )
509
+ : Value(location),
510
+ value_(value)
511
+ {}
512
+
513
+ ~BooleanValue() {}
514
+
515
+ BooleanValue(const BooleanValue&) = delete;
516
+ BooleanValue& operator=(const BooleanValue&) = delete;
517
+
518
+ bool getValue() const
519
+ { return value_; }
520
+
521
+ void accept(visitor::AstVisitor *visitor) const override;
522
+ };
523
+
524
+
525
+ class NullValue : public Value {
526
+ public:
527
+ explicit NullValue(
528
+ const yy::location &location
529
+
530
+ )
531
+ : Value(location)
532
+
533
+ {}
534
+
535
+ ~NullValue() {}
536
+
537
+ NullValue(const NullValue&) = delete;
538
+ NullValue& operator=(const NullValue&) = delete;
539
+
540
+ void accept(visitor::AstVisitor *visitor) const override;
541
+ };
542
+
543
+
544
+ class EnumValue : public Value {
545
+ std::unique_ptr<const char, CDeleter> value_;
546
+ public:
547
+ explicit EnumValue(
548
+ const yy::location &location,
549
+ const char * value
550
+ )
551
+ : Value(location),
552
+ value_(value)
553
+ {}
554
+
555
+ ~EnumValue() {}
556
+
557
+ EnumValue(const EnumValue&) = delete;
558
+ EnumValue& operator=(const EnumValue&) = delete;
559
+
560
+ const char * getValue() const
561
+ { return value_.get(); }
562
+
563
+ void accept(visitor::AstVisitor *visitor) const override;
564
+ };
565
+
566
+
567
+ class ListValue : public Value {
568
+ std::unique_ptr<std::vector<std::unique_ptr<Value>>> values_;
569
+ public:
570
+ explicit ListValue(
571
+ const yy::location &location,
572
+ std::vector<std::unique_ptr<Value>> * values
573
+ )
574
+ : Value(location),
575
+ values_(values)
576
+ {}
577
+
578
+ ~ListValue() {}
579
+
580
+ ListValue(const ListValue&) = delete;
581
+ ListValue& operator=(const ListValue&) = delete;
582
+
583
+ const std::vector<std::unique_ptr<Value>>& getValues() const
584
+ { return *values_; }
585
+
586
+ void accept(visitor::AstVisitor *visitor) const override;
587
+ };
588
+
589
+
590
+ class ObjectValue : public Value {
591
+ std::unique_ptr<std::vector<std::unique_ptr<ObjectField>>> fields_;
592
+ public:
593
+ explicit ObjectValue(
594
+ const yy::location &location,
595
+ std::vector<std::unique_ptr<ObjectField>> * fields
596
+ )
597
+ : Value(location),
598
+ fields_(fields)
599
+ {}
600
+
601
+ ~ObjectValue() {}
602
+
603
+ ObjectValue(const ObjectValue&) = delete;
604
+ ObjectValue& operator=(const ObjectValue&) = delete;
605
+
606
+ const std::vector<std::unique_ptr<ObjectField>>& getFields() const
607
+ { return *fields_; }
608
+
609
+ void accept(visitor::AstVisitor *visitor) const override;
610
+ };
611
+
612
+
613
+ class ObjectField : public Node {
614
+ std::unique_ptr<Name> name_;
615
+ std::unique_ptr<Value> value_;
616
+ public:
617
+ explicit ObjectField(
618
+ const yy::location &location,
619
+ Name * name,
620
+ Value * value
621
+ )
622
+ : Node(location),
623
+ name_(name),
624
+ value_(value)
625
+ {}
626
+
627
+ ~ObjectField() {}
628
+
629
+ ObjectField(const ObjectField&) = delete;
630
+ ObjectField& operator=(const ObjectField&) = delete;
631
+
632
+ const Name& getName() const
633
+ { return *name_; }
634
+
635
+ const Value& getValue() const
636
+ { return *value_; }
637
+
638
+ void accept(visitor::AstVisitor *visitor) const override;
639
+ };
640
+
641
+
642
+ class Directive : public Node {
643
+ std::unique_ptr<Name> name_;
644
+ std::unique_ptr<std::vector<std::unique_ptr<Argument>>> arguments_;
645
+ public:
646
+ explicit Directive(
647
+ const yy::location &location,
648
+ Name * name,
649
+ std::vector<std::unique_ptr<Argument>> * arguments
650
+ )
651
+ : Node(location),
652
+ name_(name),
653
+ arguments_(arguments)
654
+ {}
655
+
656
+ ~Directive() {}
657
+
658
+ Directive(const Directive&) = delete;
659
+ Directive& operator=(const Directive&) = delete;
660
+
661
+ const Name& getName() const
662
+ { return *name_; }
663
+
664
+ const std::vector<std::unique_ptr<Argument>>* getArguments() const
665
+ { return arguments_.get(); }
666
+
667
+ void accept(visitor::AstVisitor *visitor) const override;
668
+ };
669
+
670
+
671
+ class Type : public Node {
672
+ public:
673
+ explicit Type(
674
+ const yy::location &location
675
+
676
+ )
677
+ : Node(location)
678
+
679
+ {}
680
+ };
681
+
682
+ class NamedType : public Type {
683
+ std::unique_ptr<Name> name_;
684
+ public:
685
+ explicit NamedType(
686
+ const yy::location &location,
687
+ Name * name
688
+ )
689
+ : Type(location),
690
+ name_(name)
691
+ {}
692
+
693
+ ~NamedType() {}
694
+
695
+ NamedType(const NamedType&) = delete;
696
+ NamedType& operator=(const NamedType&) = delete;
697
+
698
+ const Name& getName() const
699
+ { return *name_; }
700
+
701
+ void accept(visitor::AstVisitor *visitor) const override;
702
+ };
703
+
704
+
705
+ class ListType : public Type {
706
+ std::unique_ptr<Type> type_;
707
+ public:
708
+ explicit ListType(
709
+ const yy::location &location,
710
+ Type * type
711
+ )
712
+ : Type(location),
713
+ type_(type)
714
+ {}
715
+
716
+ ~ListType() {}
717
+
718
+ ListType(const ListType&) = delete;
719
+ ListType& operator=(const ListType&) = delete;
720
+
721
+ const Type& getType() const
722
+ { return *type_; }
723
+
724
+ void accept(visitor::AstVisitor *visitor) const override;
725
+ };
726
+
727
+
728
+ class NonNullType : public Type {
729
+ std::unique_ptr<Type> type_;
730
+ public:
731
+ explicit NonNullType(
732
+ const yy::location &location,
733
+ Type * type
734
+ )
735
+ : Type(location),
736
+ type_(type)
737
+ {}
738
+
739
+ ~NonNullType() {}
740
+
741
+ NonNullType(const NonNullType&) = delete;
742
+ NonNullType& operator=(const NonNullType&) = delete;
743
+
744
+ const Type& getType() const
745
+ { return *type_; }
746
+
747
+ void accept(visitor::AstVisitor *visitor) const override;
748
+ };
749
+
750
+
751
+ class Name : public Node {
752
+ std::unique_ptr<const char, CDeleter> value_;
753
+ public:
754
+ explicit Name(
755
+ const yy::location &location,
756
+ const char * value
757
+ )
758
+ : Node(location),
759
+ value_(value)
760
+ {}
761
+
762
+ ~Name() {}
763
+
764
+ Name(const Name&) = delete;
765
+ Name& operator=(const Name&) = delete;
766
+
767
+ const char * getValue() const
768
+ { return value_.get(); }
769
+
770
+ void accept(visitor::AstVisitor *visitor) const override;
771
+ };
772
+
773
+
774
+ class SchemaDefinition : public Definition {
775
+ std::unique_ptr<std::vector<std::unique_ptr<Directive>>> directives_;
776
+ std::unique_ptr<std::vector<std::unique_ptr<OperationTypeDefinition>>> operationTypes_;
777
+ public:
778
+ explicit SchemaDefinition(
779
+ const yy::location &location,
780
+ std::vector<std::unique_ptr<Directive>> * directives,
781
+ std::vector<std::unique_ptr<OperationTypeDefinition>> * operationTypes
782
+ )
783
+ : Definition(location),
784
+ directives_(directives),
785
+ operationTypes_(operationTypes)
786
+ {}
787
+
788
+ ~SchemaDefinition() {}
789
+
790
+ SchemaDefinition(const SchemaDefinition&) = delete;
791
+ SchemaDefinition& operator=(const SchemaDefinition&) = delete;
792
+
793
+ const std::vector<std::unique_ptr<Directive>>* getDirectives() const
794
+ { return directives_.get(); }
795
+
796
+ const std::vector<std::unique_ptr<OperationTypeDefinition>>& getOperationTypes() const
797
+ { return *operationTypes_; }
798
+
799
+ void accept(visitor::AstVisitor *visitor) const override;
800
+ };
801
+
802
+
803
+ class OperationTypeDefinition : public Node {
804
+ std::unique_ptr<const char, CDeleter> operation_;
805
+ std::unique_ptr<NamedType> type_;
806
+ public:
807
+ explicit OperationTypeDefinition(
808
+ const yy::location &location,
809
+ const char * operation,
810
+ NamedType * type
811
+ )
812
+ : Node(location),
813
+ operation_(operation),
814
+ type_(type)
815
+ {}
816
+
817
+ ~OperationTypeDefinition() {}
818
+
819
+ OperationTypeDefinition(const OperationTypeDefinition&) = delete;
820
+ OperationTypeDefinition& operator=(const OperationTypeDefinition&) = delete;
821
+
822
+ const char * getOperation() const
823
+ { return operation_.get(); }
824
+
825
+ const NamedType& getType() const
826
+ { return *type_; }
827
+
828
+ void accept(visitor::AstVisitor *visitor) const override;
829
+ };
830
+
831
+
832
+ class ScalarTypeDefinition : public Definition {
833
+ std::unique_ptr<Name> name_;
834
+ std::unique_ptr<std::vector<std::unique_ptr<Directive>>> directives_;
835
+ public:
836
+ explicit ScalarTypeDefinition(
837
+ const yy::location &location,
838
+ Name * name,
839
+ std::vector<std::unique_ptr<Directive>> * directives
840
+ )
841
+ : Definition(location),
842
+ name_(name),
843
+ directives_(directives)
844
+ {}
845
+
846
+ ~ScalarTypeDefinition() {}
847
+
848
+ ScalarTypeDefinition(const ScalarTypeDefinition&) = delete;
849
+ ScalarTypeDefinition& operator=(const ScalarTypeDefinition&) = delete;
850
+
851
+ const Name& getName() const
852
+ { return *name_; }
853
+
854
+ const std::vector<std::unique_ptr<Directive>>* getDirectives() const
855
+ { return directives_.get(); }
856
+
857
+ void accept(visitor::AstVisitor *visitor) const override;
858
+ };
859
+
860
+
861
+ class ObjectTypeDefinition : public Definition {
862
+ std::unique_ptr<Name> name_;
863
+ std::unique_ptr<std::vector<std::unique_ptr<NamedType>>> interfaces_;
864
+ std::unique_ptr<std::vector<std::unique_ptr<Directive>>> directives_;
865
+ std::unique_ptr<std::vector<std::unique_ptr<FieldDefinition>>> fields_;
866
+ public:
867
+ explicit ObjectTypeDefinition(
868
+ const yy::location &location,
869
+ Name * name,
870
+ std::vector<std::unique_ptr<NamedType>> * interfaces,
871
+ std::vector<std::unique_ptr<Directive>> * directives,
872
+ std::vector<std::unique_ptr<FieldDefinition>> * fields
873
+ )
874
+ : Definition(location),
875
+ name_(name),
876
+ interfaces_(interfaces),
877
+ directives_(directives),
878
+ fields_(fields)
879
+ {}
880
+
881
+ ~ObjectTypeDefinition() {}
882
+
883
+ ObjectTypeDefinition(const ObjectTypeDefinition&) = delete;
884
+ ObjectTypeDefinition& operator=(const ObjectTypeDefinition&) = delete;
885
+
886
+ const Name& getName() const
887
+ { return *name_; }
888
+
889
+ const std::vector<std::unique_ptr<NamedType>>* getInterfaces() const
890
+ { return interfaces_.get(); }
891
+
892
+ const std::vector<std::unique_ptr<Directive>>* getDirectives() const
893
+ { return directives_.get(); }
894
+
895
+ const std::vector<std::unique_ptr<FieldDefinition>>& getFields() const
896
+ { return *fields_; }
897
+
898
+ void accept(visitor::AstVisitor *visitor) const override;
899
+ };
900
+
901
+
902
+ class FieldDefinition : public Node {
903
+ std::unique_ptr<Name> name_;
904
+ std::unique_ptr<std::vector<std::unique_ptr<InputValueDefinition>>> arguments_;
905
+ std::unique_ptr<Type> type_;
906
+ std::unique_ptr<std::vector<std::unique_ptr<Directive>>> directives_;
907
+ public:
908
+ explicit FieldDefinition(
909
+ const yy::location &location,
910
+ Name * name,
911
+ std::vector<std::unique_ptr<InputValueDefinition>> * arguments,
912
+ Type * type,
913
+ std::vector<std::unique_ptr<Directive>> * directives
914
+ )
915
+ : Node(location),
916
+ name_(name),
917
+ arguments_(arguments),
918
+ type_(type),
919
+ directives_(directives)
920
+ {}
921
+
922
+ ~FieldDefinition() {}
923
+
924
+ FieldDefinition(const FieldDefinition&) = delete;
925
+ FieldDefinition& operator=(const FieldDefinition&) = delete;
926
+
927
+ const Name& getName() const
928
+ { return *name_; }
929
+
930
+ const std::vector<std::unique_ptr<InputValueDefinition>>* getArguments() const
931
+ { return arguments_.get(); }
932
+
933
+ const Type& getType() const
934
+ { return *type_; }
935
+
936
+ const std::vector<std::unique_ptr<Directive>>* getDirectives() const
937
+ { return directives_.get(); }
938
+
939
+ void accept(visitor::AstVisitor *visitor) const override;
940
+ };
941
+
942
+
943
+ class InputValueDefinition : public Node {
944
+ std::unique_ptr<Name> name_;
945
+ std::unique_ptr<Type> type_;
946
+ std::unique_ptr<Value> defaultValue_;
947
+ std::unique_ptr<std::vector<std::unique_ptr<Directive>>> directives_;
948
+ public:
949
+ explicit InputValueDefinition(
950
+ const yy::location &location,
951
+ Name * name,
952
+ Type * type,
953
+ Value * defaultValue,
954
+ std::vector<std::unique_ptr<Directive>> * directives
955
+ )
956
+ : Node(location),
957
+ name_(name),
958
+ type_(type),
959
+ defaultValue_(defaultValue),
960
+ directives_(directives)
961
+ {}
962
+
963
+ ~InputValueDefinition() {}
964
+
965
+ InputValueDefinition(const InputValueDefinition&) = delete;
966
+ InputValueDefinition& operator=(const InputValueDefinition&) = delete;
967
+
968
+ const Name& getName() const
969
+ { return *name_; }
970
+
971
+ const Type& getType() const
972
+ { return *type_; }
973
+
974
+ const Value* getDefaultValue() const
975
+ { return defaultValue_.get(); }
976
+
977
+ const std::vector<std::unique_ptr<Directive>>* getDirectives() const
978
+ { return directives_.get(); }
979
+
980
+ void accept(visitor::AstVisitor *visitor) const override;
981
+ };
982
+
983
+
984
+ class InterfaceTypeDefinition : public Definition {
985
+ std::unique_ptr<Name> name_;
986
+ std::unique_ptr<std::vector<std::unique_ptr<Directive>>> directives_;
987
+ std::unique_ptr<std::vector<std::unique_ptr<FieldDefinition>>> fields_;
988
+ public:
989
+ explicit InterfaceTypeDefinition(
990
+ const yy::location &location,
991
+ Name * name,
992
+ std::vector<std::unique_ptr<Directive>> * directives,
993
+ std::vector<std::unique_ptr<FieldDefinition>> * fields
994
+ )
995
+ : Definition(location),
996
+ name_(name),
997
+ directives_(directives),
998
+ fields_(fields)
999
+ {}
1000
+
1001
+ ~InterfaceTypeDefinition() {}
1002
+
1003
+ InterfaceTypeDefinition(const InterfaceTypeDefinition&) = delete;
1004
+ InterfaceTypeDefinition& operator=(const InterfaceTypeDefinition&) = delete;
1005
+
1006
+ const Name& getName() const
1007
+ { return *name_; }
1008
+
1009
+ const std::vector<std::unique_ptr<Directive>>* getDirectives() const
1010
+ { return directives_.get(); }
1011
+
1012
+ const std::vector<std::unique_ptr<FieldDefinition>>& getFields() const
1013
+ { return *fields_; }
1014
+
1015
+ void accept(visitor::AstVisitor *visitor) const override;
1016
+ };
1017
+
1018
+
1019
+ class UnionTypeDefinition : public Definition {
1020
+ std::unique_ptr<Name> name_;
1021
+ std::unique_ptr<std::vector<std::unique_ptr<Directive>>> directives_;
1022
+ std::unique_ptr<std::vector<std::unique_ptr<NamedType>>> types_;
1023
+ public:
1024
+ explicit UnionTypeDefinition(
1025
+ const yy::location &location,
1026
+ Name * name,
1027
+ std::vector<std::unique_ptr<Directive>> * directives,
1028
+ std::vector<std::unique_ptr<NamedType>> * types
1029
+ )
1030
+ : Definition(location),
1031
+ name_(name),
1032
+ directives_(directives),
1033
+ types_(types)
1034
+ {}
1035
+
1036
+ ~UnionTypeDefinition() {}
1037
+
1038
+ UnionTypeDefinition(const UnionTypeDefinition&) = delete;
1039
+ UnionTypeDefinition& operator=(const UnionTypeDefinition&) = delete;
1040
+
1041
+ const Name& getName() const
1042
+ { return *name_; }
1043
+
1044
+ const std::vector<std::unique_ptr<Directive>>* getDirectives() const
1045
+ { return directives_.get(); }
1046
+
1047
+ const std::vector<std::unique_ptr<NamedType>>& getTypes() const
1048
+ { return *types_; }
1049
+
1050
+ void accept(visitor::AstVisitor *visitor) const override;
1051
+ };
1052
+
1053
+
1054
+ class EnumTypeDefinition : public Definition {
1055
+ std::unique_ptr<Name> name_;
1056
+ std::unique_ptr<std::vector<std::unique_ptr<Directive>>> directives_;
1057
+ std::unique_ptr<std::vector<std::unique_ptr<EnumValueDefinition>>> values_;
1058
+ public:
1059
+ explicit EnumTypeDefinition(
1060
+ const yy::location &location,
1061
+ Name * name,
1062
+ std::vector<std::unique_ptr<Directive>> * directives,
1063
+ std::vector<std::unique_ptr<EnumValueDefinition>> * values
1064
+ )
1065
+ : Definition(location),
1066
+ name_(name),
1067
+ directives_(directives),
1068
+ values_(values)
1069
+ {}
1070
+
1071
+ ~EnumTypeDefinition() {}
1072
+
1073
+ EnumTypeDefinition(const EnumTypeDefinition&) = delete;
1074
+ EnumTypeDefinition& operator=(const EnumTypeDefinition&) = delete;
1075
+
1076
+ const Name& getName() const
1077
+ { return *name_; }
1078
+
1079
+ const std::vector<std::unique_ptr<Directive>>* getDirectives() const
1080
+ { return directives_.get(); }
1081
+
1082
+ const std::vector<std::unique_ptr<EnumValueDefinition>>& getValues() const
1083
+ { return *values_; }
1084
+
1085
+ void accept(visitor::AstVisitor *visitor) const override;
1086
+ };
1087
+
1088
+
1089
+ class EnumValueDefinition : public Node {
1090
+ std::unique_ptr<Name> name_;
1091
+ std::unique_ptr<std::vector<std::unique_ptr<Directive>>> directives_;
1092
+ public:
1093
+ explicit EnumValueDefinition(
1094
+ const yy::location &location,
1095
+ Name * name,
1096
+ std::vector<std::unique_ptr<Directive>> * directives
1097
+ )
1098
+ : Node(location),
1099
+ name_(name),
1100
+ directives_(directives)
1101
+ {}
1102
+
1103
+ ~EnumValueDefinition() {}
1104
+
1105
+ EnumValueDefinition(const EnumValueDefinition&) = delete;
1106
+ EnumValueDefinition& operator=(const EnumValueDefinition&) = delete;
1107
+
1108
+ const Name& getName() const
1109
+ { return *name_; }
1110
+
1111
+ const std::vector<std::unique_ptr<Directive>>* getDirectives() const
1112
+ { return directives_.get(); }
1113
+
1114
+ void accept(visitor::AstVisitor *visitor) const override;
1115
+ };
1116
+
1117
+
1118
+ class InputObjectTypeDefinition : public Definition {
1119
+ std::unique_ptr<Name> name_;
1120
+ std::unique_ptr<std::vector<std::unique_ptr<Directive>>> directives_;
1121
+ std::unique_ptr<std::vector<std::unique_ptr<InputValueDefinition>>> fields_;
1122
+ public:
1123
+ explicit InputObjectTypeDefinition(
1124
+ const yy::location &location,
1125
+ Name * name,
1126
+ std::vector<std::unique_ptr<Directive>> * directives,
1127
+ std::vector<std::unique_ptr<InputValueDefinition>> * fields
1128
+ )
1129
+ : Definition(location),
1130
+ name_(name),
1131
+ directives_(directives),
1132
+ fields_(fields)
1133
+ {}
1134
+
1135
+ ~InputObjectTypeDefinition() {}
1136
+
1137
+ InputObjectTypeDefinition(const InputObjectTypeDefinition&) = delete;
1138
+ InputObjectTypeDefinition& operator=(const InputObjectTypeDefinition&) = delete;
1139
+
1140
+ const Name& getName() const
1141
+ { return *name_; }
1142
+
1143
+ const std::vector<std::unique_ptr<Directive>>* getDirectives() const
1144
+ { return directives_.get(); }
1145
+
1146
+ const std::vector<std::unique_ptr<InputValueDefinition>>& getFields() const
1147
+ { return *fields_; }
1148
+
1149
+ void accept(visitor::AstVisitor *visitor) const override;
1150
+ };
1151
+
1152
+
1153
+ class TypeExtensionDefinition : public Definition {
1154
+ std::unique_ptr<ObjectTypeDefinition> definition_;
1155
+ public:
1156
+ explicit TypeExtensionDefinition(
1157
+ const yy::location &location,
1158
+ ObjectTypeDefinition * definition
1159
+ )
1160
+ : Definition(location),
1161
+ definition_(definition)
1162
+ {}
1163
+
1164
+ ~TypeExtensionDefinition() {}
1165
+
1166
+ TypeExtensionDefinition(const TypeExtensionDefinition&) = delete;
1167
+ TypeExtensionDefinition& operator=(const TypeExtensionDefinition&) = delete;
1168
+
1169
+ const ObjectTypeDefinition& getDefinition() const
1170
+ { return *definition_; }
1171
+
1172
+ void accept(visitor::AstVisitor *visitor) const override;
1173
+ };
1174
+
1175
+
1176
+ class DirectiveDefinition : public Definition {
1177
+ std::unique_ptr<Name> name_;
1178
+ std::unique_ptr<std::vector<std::unique_ptr<InputValueDefinition>>> arguments_;
1179
+ std::unique_ptr<std::vector<std::unique_ptr<Name>>> locations_;
1180
+ public:
1181
+ explicit DirectiveDefinition(
1182
+ const yy::location &location,
1183
+ Name * name,
1184
+ std::vector<std::unique_ptr<InputValueDefinition>> * arguments,
1185
+ std::vector<std::unique_ptr<Name>> * locations
1186
+ )
1187
+ : Definition(location),
1188
+ name_(name),
1189
+ arguments_(arguments),
1190
+ locations_(locations)
1191
+ {}
1192
+
1193
+ ~DirectiveDefinition() {}
1194
+
1195
+ DirectiveDefinition(const DirectiveDefinition&) = delete;
1196
+ DirectiveDefinition& operator=(const DirectiveDefinition&) = delete;
1197
+
1198
+ const Name& getName() const
1199
+ { return *name_; }
1200
+
1201
+ const std::vector<std::unique_ptr<InputValueDefinition>>* getArguments() const
1202
+ { return arguments_.get(); }
1203
+
1204
+ const std::vector<std::unique_ptr<Name>>& getLocations() const
1205
+ { return *locations_; }
1206
+
1207
+ void accept(visitor::AstVisitor *visitor) const override;
1208
+ };
1209
+
1210
+
1211
+
1212
+ }
1213
+ }
1214
+ }