{-# LANGUAGE CPP #-}
{-# LANGUAGE ConstraintKinds #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE NoImplicitPrelude #-}
-- | GraphQL Wai Server Applications
module Data.Morpheus.Server
( httpPlayground,
compileTimeSchemaValidation,
printSchema,
RootResolverConstraint,
interpreter,
debugInterpreter,
App,
deriveApp,
runApp,
withDebugger,
)
where
import Data.ByteString.Lazy.Char8
( ByteString,
pack,
)
import Data.Morpheus.App
( App (..),
MapAPI,
runApp,
withDebugger,
)
import Data.Morpheus.App.Internal.Resolving
( resultOr,
)
import Data.Morpheus.Core
( render,
)
import Data.Morpheus.Server.Deriving.App
( RootResolverConstraint,
deriveApp,
deriveSchema,
)
import Data.Morpheus.Server.Deriving.Schema
( compileTimeSchemaValidation,
)
import Data.Morpheus.Server.Playground
( httpPlayground,
)
import Data.Morpheus.Server.Resolvers (RootResolver)
import Relude hiding (ByteString)
-- | Generates schema.gql file from 'RootResolver'
printSchema ::
RootResolverConstraint m event query mut sub =>
proxy (RootResolver m event query mut sub) ->
ByteString
printSchema =
resultOr (pack . show) render
. deriveSchema
-- | main query processor and resolver
interpreter ::
(MapAPI a b, RootResolverConstraint m e query mut sub) =>
RootResolver m e query mut sub ->
a ->
m b
interpreter = runApp . deriveApp
debugInterpreter ::
(MapAPI a b, RootResolverConstraint m e query mut sub) =>
RootResolver m e query mut sub ->
a ->
m b
debugInterpreter = runApp . withDebugger . deriveApp