{-# 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 -- -- Morpheus 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