{-# LANGUAGE OverloadedStrings #-}

module Data.Morpheus.Parser.Fragment
  ( fragment
  ) where

import           Data.Attoparsec.Text               (Parser, skipSpace, string)
import           Data.Morpheus.Parser.Body          (entries)
import           Data.Morpheus.Parser.Primitive     (getPosition, token)
import           Data.Morpheus.Types.Query.Fragment (Fragment (..))
import           Data.Text                          (Text)

fragment :: Parser (Text, Fragment)
fragment = do
  skipSpace
  index <- getPosition
  _ <- string "fragment"
  skipSpace
  name <- token
  skipSpace
  _ <- string "on"
  skipSpace
  targetName <- token
  skipSpace
  fragmentBody <- entries
  pure (name, Fragment {key = name, target = targetName, content = fragmentBody, position = index})