morpheus-graphql-0.1.0: src/Data/Morpheus/Parser/Fragment.hs
{-# LANGUAGE OverloadedStrings #-}
module Data.Morpheus.Parser.Fragment
( fragment
) where
import Data.Morpheus.Parser.Body (entries)
import Data.Morpheus.Parser.Internal (Parser)
import Data.Morpheus.Parser.Primitive (token)
import Data.Morpheus.Parser.Terms (onType)
import Data.Morpheus.Types.Internal.AST.RawSelection (Fragment (..))
import Data.Text (Text)
import Text.Megaparsec (getSourcePos, label)
import Text.Megaparsec.Char (space, string)
fragment :: Parser (Text, Fragment)
fragment = label "fragment" $ do
index <- getSourcePos
_ <- string "fragment"
space
name' <- token
type' <- onType
fragmentBody <- entries
pure (name', Fragment {fragmentType = type', fragmentSelection = fragmentBody, fragmentPosition = index})