{-# LANGUAGE OverloadedStrings #-} module Data.Morpheus.Parser.Mutation ( mutation ) 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) mutation :: Parser RawOperator mutation = do pos <- getPosition _ <- string "mutation " skipSpace name <- token variables <- try (skipSpace *> rootHeadArguments) <|> pure [] skipSpace sel <- entries pure $ Mutation name variables sel pos