summaryrefslogtreecommitdiff
path: root/src/Language/GraphQL/AST/Parser.hs
diff options
context:
space:
mode:
authorEugen Wissner <belka@caraus.de>2020-01-03 07:20:48 +0100
committerEugen Wissner <belka@caraus.de>2020-01-13 08:18:30 +0100
commitd9a2937b55b3f9c55ac42b1968b62888d916dace (patch)
tree1965dcf23a4853449c18d6daf3f108b97f700418 /src/Language/GraphQL/AST/Parser.hs
parentf4f076fa59ec393fa0e03595deb82d94c01142d3 (diff)
downloadgraphql-d9a2937b55b3f9c55ac42b1968b62888d916dace.tar.gz
Parse SchemaDefinition
Diffstat (limited to 'src/Language/GraphQL/AST/Parser.hs')
-rw-r--r--src/Language/GraphQL/AST/Parser.hs43
1 files changed, 33 insertions, 10 deletions
diff --git a/src/Language/GraphQL/AST/Parser.hs b/src/Language/GraphQL/AST/Parser.hs
index d8b467a..8a5f67b 100644
--- a/src/Language/GraphQL/AST/Parser.hs
+++ b/src/Language/GraphQL/AST/Parser.hs
@@ -8,21 +8,44 @@ module Language.GraphQL.AST.Parser
import Control.Applicative (Alternative(..), optional)
import qualified Control.Applicative.Combinators.NonEmpty as NonEmpty
-import Language.GraphQL.AST
-import qualified Language.GraphQL.AST.Document as Document
+import Language.GraphQL.AST.Document
import Language.GraphQL.AST.Lexer
import Text.Megaparsec (lookAhead, option, try, (<?>))
-- | Parser for the GraphQL documents.
-document :: Parser Document.Document
+document :: Parser Document
document = unicodeBOM
>> spaceConsumer
- >> lexeme (NonEmpty.some $ Document.ExecutableDefinition <$> definition)
-
-definition :: Parser ExecutableDefinition
-definition = DefinitionOperation <$> operationDefinition
- <|> DefinitionFragment <$> fragmentDefinition
- <?> "definition error!"
+ >> lexeme (NonEmpty.some definition)
+
+definition :: Parser Definition
+definition = ExecutableDefinition <$> executableDefinition
+ <|> TypeSystemDefinition <$> typeSystemDefinition
+ <?> "Definition"
+
+executableDefinition :: Parser ExecutableDefinition
+executableDefinition = DefinitionOperation <$> operationDefinition
+ <|> DefinitionFragment <$> fragmentDefinition
+ <?> "ExecutableDefinition"
+
+typeSystemDefinition :: Parser TypeSystemDefinition
+typeSystemDefinition = schemaDefinition
+
+schemaDefinition :: Parser TypeSystemDefinition
+schemaDefinition = SchemaDefinition
+ <$ symbol "schema"
+ <*> opt directives
+ <*> operationTypeDefinitions
+ <?> "SchemaDefinition"
+
+operationTypeDefinitions :: Parser OperationTypeDefinitions
+operationTypeDefinitions = braces $ manyNE operationTypeDefinition
+
+operationTypeDefinition :: Parser OperationTypeDefinition
+operationTypeDefinition = OperationTypeDefinition
+ <$> operationType <* colon
+ <*> name
+ <?> "OperationTypeDefinition"
operationDefinition :: Parser OperationDefinition
operationDefinition = SelectionSet <$> selectionSet
@@ -39,7 +62,7 @@ operationDefinition = SelectionSet <$> selectionSet
operationType :: Parser OperationType
operationType = Query <$ symbol "query"
<|> Mutation <$ symbol "mutation"
- <?> "operationType error"
+ -- <?> Keep default error message
-- * SelectionSet