morpheus-graphql-0.1.0: src/Data/Morpheus/Parser/Arguments.hs
module Data.Morpheus.Parser.Arguments
( maybeArguments
) where
import Data.Morpheus.Parser.Internal (Parser)
import Data.Morpheus.Parser.Primitive (token, variable)
import Data.Morpheus.Parser.Terms (parseAssignment, parseMaybeTuple)
import Data.Morpheus.Parser.Value (enumValue, parseValue)
import Data.Morpheus.Types.Internal.AST.RawSelection (Argument (..), RawArgument (..), RawArguments,
Reference (..))
import Text.Megaparsec (getSourcePos, label, (<|>))
valueArgument :: Parser RawArgument
valueArgument = label "valueArgument" $ do
position' <- getSourcePos
value' <- parseValue <|> enumValue
pure $ RawArgument $ Argument {argumentValue = value', argumentPosition = position'}
variableArgument :: Parser RawArgument
variableArgument = label "variableArgument" $ do
(reference', position') <- variable
pure $ VariableReference $ Reference {referenceName = reference', referencePosition = position'}
maybeArguments :: Parser RawArguments
maybeArguments = label "maybeArguments" $ parseMaybeTuple argument
where
argument = parseAssignment token (valueArgument <|> variableArgument)