diff options
| author | Eugen Wissner <belka@caraus.de> | 2020-01-03 07:20:48 +0100 |
|---|---|---|
| committer | Eugen Wissner <belka@caraus.de> | 2020-01-13 08:18:30 +0100 |
| commit | d9a2937b55b3f9c55ac42b1968b62888d916dace (patch) | |
| tree | 1965dcf23a4853449c18d6daf3f108b97f700418 /src/Language/GraphQL/AST/Parser.hs | |
| parent | f4f076fa59ec393fa0e03595deb82d94c01142d3 (diff) | |
| download | graphql-d9a2937b55b3f9c55ac42b1968b62888d916dace.tar.gz | |
Parse SchemaDefinition
Diffstat (limited to 'src/Language/GraphQL/AST/Parser.hs')
| -rw-r--r-- | src/Language/GraphQL/AST/Parser.hs | 43 |
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 |
