morpheus-graphql-0.18.0: src/Data/Morpheus/Server/TH/Compile.hs
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE NoImplicitPrelude #-}
module Data.Morpheus.Server.TH.Compile
( compileDocument,
gqlDocument,
)
where
--
-- Morpheus
import qualified Data.ByteString.Lazy.Char8 as LB
import Data.ByteString.Lazy.Char8 (ByteString)
import Data.Morpheus.CodeGen
( parseServerTypeDefinitions,
)
import Data.Morpheus.CodeGen.Internal.AST
( CodeGenConfig (..),
)
import Data.Morpheus.Server.TH.Declare
( runDeclare,
)
import Language.Haskell.TH
import Language.Haskell.TH.Quote (QuasiQuoter (..))
import Relude hiding (ByteString)
gqlDocument :: QuasiQuoter
gqlDocument = mkQuasiQuoter CodeGenConfig {namespace = False}
mkQuasiQuoter :: CodeGenConfig -> QuasiQuoter
mkQuasiQuoter ctx =
QuasiQuoter
{ quoteExp = notHandled "Expressions",
quotePat = notHandled "Patterns",
quoteType = notHandled "Types",
quoteDec = compileDocument ctx . LB.pack
}
where
notHandled things =
error $ things <> " are not supported by the GraphQL QuasiQuoter"
compileDocument :: CodeGenConfig -> ByteString -> Q [Dec]
compileDocument ctx = parseServerTypeDefinitions ctx >=> runDeclare ctx