{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE OverloadedStrings #-}
module Data.Morpheus.Parsing.Document.Parser
( parseTypes
) where
import Data.Text (Text)
import Text.Megaparsec (eof, label, manyTill, runParser)
import Data.Morpheus.Parsing.Document.TypeSystem (parseDataType)
import Data.Morpheus.Parsing.Internal.Internal (processErrorBundle)
import Data.Morpheus.Parsing.Internal.Terms (spaceAndComments)
import Data.Morpheus.Types.Internal.Data (RawDataType)
import Data.Morpheus.Types.Internal.Validation (Validation)
parseTypes :: Text -> Validation [(Text, RawDataType)]
parseTypes doc =
case parseDoc of
Right root -> Right root
Left parseError -> Left $ processErrorBundle parseError
where
parseDoc = runParser request "<input>" doc
request =
label "DocumentTypes" $ do
spaceAndComments
manyTill parseDataType eof