-- | Basic tokenising used by parser.
module GraphQL.Internal.Syntax.Tokens
  ( tok
  , whiteSpace
  ) where

import Protolude
import Data.Attoparsec.Text
  ( Parser
  , anyChar
  , endOfLine
  , peekChar
  , manyTill
  )
import Data.Char (isSpace)

tok :: Parser a -> Parser a
tok p = p <* whiteSpace

whiteSpace :: Parser ()
whiteSpace = peekChar >>= traverse_ (\c ->
  if isSpace c || c == ','
    then anyChar *> whiteSpace
    else when (c == '#') $ manyTill anyChar endOfLine *> whiteSpace)