summaryrefslogtreecommitdiff
path: root/src/Language/GraphQL/AST/Parser.hs
diff options
context:
space:
mode:
authorEugen Wissner <belka@caraus.de>2020-01-25 16:37:17 +0100
committerEugen Wissner <belka@caraus.de>2020-01-25 16:45:39 +0100
commitb4a3c9811447ab1c7704e9667ff0103771b7587c (patch)
tree377262ed29cb8e966e24f6ec020d6ff266937cc6 /src/Language/GraphQL/AST/Parser.hs
parentcb5270b1974f80d34b0178a90198f96d96f57522 (diff)
downloadgraphql-b4a3c9811447ab1c7704e9667ff0103771b7587c.tar.gz
Parse schema extensions
Diffstat (limited to 'src/Language/GraphQL/AST/Parser.hs')
-rw-r--r--src/Language/GraphQL/AST/Parser.hs18
1 files changed, 17 insertions, 1 deletions
diff --git a/src/Language/GraphQL/AST/Parser.hs b/src/Language/GraphQL/AST/Parser.hs
index 33deb15..a750651 100644
--- a/src/Language/GraphQL/AST/Parser.hs
+++ b/src/Language/GraphQL/AST/Parser.hs
@@ -30,6 +30,7 @@ document = unicodeBOM
definition :: Parser Definition
definition = ExecutableDefinition <$> executableDefinition
<|> TypeSystemDefinition <$> typeSystemDefinition
+ <|> TypeSystemExtension <$> typeSystemExtension
<?> "Definition"
executableDefinition :: Parser ExecutableDefinition
@@ -43,6 +44,10 @@ typeSystemDefinition = schemaDefinition
<|> directiveDefinition
<?> "TypeSystemDefinition"
+typeSystemExtension :: Parser TypeSystemExtension
+typeSystemExtension = SchemaExtension <$> schemaExtension
+ <?> "TypeSystemExtension"
+
directiveDefinition :: Parser TypeSystemDefinition
directiveDefinition = DirectiveDefinition
<$> description
@@ -214,8 +219,19 @@ schemaDefinition = SchemaDefinition
<*> directives
<*> operationTypeDefinitions
<?> "SchemaDefinition"
+
+operationTypeDefinitions :: Parser (NonEmpty OperationTypeDefinition)
+operationTypeDefinitions = braces $ NonEmpty.some operationTypeDefinition
+
+schemaExtension :: Parser SchemaExtension
+schemaExtension = extend "schema"
+ >> try schemaOperationExtension
+ <|> SchemaDirectiveExtension <$> NonEmpty.some directive
+ <?> "SchemaExtension"
where
- operationTypeDefinitions = braces $ NonEmpty.some operationTypeDefinition
+ schemaOperationExtension = SchemaOperationExtension
+ <$> directives
+ <*> operationTypeDefinitions
operationTypeDefinition :: Parser OperationTypeDefinition
operationTypeDefinition = OperationTypeDefinition