{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE NamedFieldPuns   #-}

module Data.Morpheus.Parsing.Document.Parse
  ( parseGraphQLDocument
  , parseFullGQLDocument
  ) where

import           Control.Monad                           ((>=>))
import           Data.ByteString.Lazy.Char8              (ByteString)
import qualified Data.Text.Lazy                          as LT (toStrict)
import           Data.Text.Lazy.Encoding                 (decodeUtf8)

-- MORPHEUS
import           Data.Morpheus.Parsing.Document.Parser   (parseDocument)
import           Data.Morpheus.Schema.SchemaAPI          (defaultTypes)
import           Data.Morpheus.Types.Internal.Data       (DataTypeLib)
import           Data.Morpheus.Types.Internal.Validation (Validation)

parseGraphQLDocument :: ByteString -> Validation DataTypeLib
parseGraphQLDocument x = parseDocument (LT.toStrict $ decodeUtf8 x)

parseFullGQLDocument :: ByteString -> Validation DataTypeLib
parseFullGQLDocument = parseGraphQLDocument >=> defaultTypes