{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE RankNTypes #-}
module Data.Morpheus.Server.Deriving.Interpreter
( Interpreter (..),
)
where
import Data.Morpheus.Core (debugConfig, defaultConfig)
import Data.Morpheus.Server.Deriving.Resolve
( RootResolverConstraint,
coreResolver,
statelessResolver,
)
import Data.Morpheus.Types
( Event,
RootResolver (..),
)
import Data.Morpheus.Types.IO
( GQLRequest,
GQLResponse,
MapAPI (..),
)
import Data.Morpheus.Types.Internal.Subscription
( Input,
Stream,
toOutStream,
)
class Interpreter e m a b where
interpreter ::
Monad m =>
(RootResolverConstraint m e query mut sub) =>
RootResolver m e query mut sub ->
a ->
b
debugInterpreter ::
Monad m =>
(RootResolverConstraint m e query mut sub) =>
RootResolver m e query mut sub ->
a ->
b
instance Interpreter e m GQLRequest (m GQLResponse) where
interpreter root = statelessResolver root defaultConfig
debugInterpreter root = statelessResolver root debugConfig
instance Interpreter (Event ch cont) m (Input api) (Stream api (Event ch cont) m) where
interpreter root = toOutStream (coreResolver root defaultConfig)
debugInterpreter root = toOutStream (coreResolver root debugConfig)
instance (MapAPI a a) => Interpreter e m a (m a) where
interpreter root = mapAPI (interpreter root)
debugInterpreter root = mapAPI (debugInterpreter root)