{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE QuasiQuotes #-}
{-# LANGUAGE TemplateHaskell #-}
module Data.Morpheus.Execution.Document.Compile
( compileExp
, compileDec
) where
import qualified Data.Text as T (pack)
import Language.Haskell.TH
import Data.Morpheus.Error.Client.Client (renderGQLErrors)
import Data.Morpheus.Execution.Document.Convert (renderTHTypes)
import Data.Morpheus.Execution.Document.Declare (declareTypes)
import Data.Morpheus.Parsing.Document.Parser (parseTypes)
import Data.Morpheus.Validation.Document.Validation
compileExp :: String -> Q Exp
compileExp documentTXT =
case parseTypes (T.pack documentTXT) >>= validatePartialDocument >>= renderTHTypes of
Left errors -> fail (renderGQLErrors errors)
Right root -> [|root|]
compileDec :: String -> Q [Dec]
compileDec documentTXT =
case parseTypes (T.pack documentTXT) >>= validatePartialDocument >>= renderTHTypes of
Left errors -> fail (renderGQLErrors errors)
Right root -> declareTypes root