{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE TypeFamilies #-}
module TH.Simple
( thSimpleApi
) where
import qualified Data.ByteString.Lazy.Char8 as B
import Data.Morpheus (interpreter)
import Data.Morpheus.Document (importGQLDocumentWithNamespace)
import Data.Morpheus.Types (GQLRootResolver (..), IORes)
import Data.Text (Text)
importGQLDocumentWithNamespace "examples/TH/simple.gql"
rootResolver :: GQLRootResolver IO () () (Query IORes) () ()
rootResolver =
GQLRootResolver
{queryResolver = return Query {queryDeity}, mutationResolver = pure (), subscriptionResolver = pure ()}
where
queryDeity QueryDeityArgs {queryDeityArgsName} = pure Deity {deityName, deityPower}
where
deityName _ = pure "Morpheus"
deityPower _ = pure (Just "Shapeshifting")
thSimpleApi :: B.ByteString -> IO B.ByteString
thSimpleApi = interpreter rootResolver