morpheus-graphql-0.0.1: src/Data/Morpheus/Parser/Query.hs
{-# LANGUAGE OverloadedStrings #-}
module Data.Morpheus.Parser.Query
( query
) where
import Control.Applicative ((<|>))
import Data.Attoparsec.Text (Parser, skipSpace, string, try)
import Data.Morpheus.Parser.Body (entries)
import Data.Morpheus.Parser.Primitive (getPosition, token)
import Data.Morpheus.Parser.RootHead (rootHeadArguments)
import Data.Morpheus.Types.Query.Operator (Operator (..), RawOperator, VariableDefinitions)
import Data.Text (Text)
queryHead :: Parser (Text, VariableDefinitions)
queryHead = do
_ <- string "query "
skipSpace
queryName <- token
variables <- try (skipSpace *> rootHeadArguments) <|> pure []
pure (queryName, variables)
query :: Parser RawOperator
query = do
pos <- getPosition
(queryName, args) <- try (skipSpace *> queryHead) <|> pure ("", [])
skipSpace
selection <- entries
pure $ Query queryName args selection pos