{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE NoImplicitPrelude #-}

module Data.Morpheus.Document
  ( toGraphQLDocument,
    gqlDocument,
    importGQLDocument,
    importGQLDocumentWithNamespace,
    RootResolverConstraint,
  )
where

import Data.ByteString.Lazy.Char8 (ByteString)
import Data.Morpheus.CodeGen.Server
  ( CodeGenConfig (..),
    gqlDocument,
    importServerTypeDefinitions,
  )
import Data.Morpheus.Server
  ( RootResolverConstraint,
    printSchema,
  )
import Data.Morpheus.Types (RootResolver)
import Language.Haskell.TH
import Relude hiding (ByteString, readFile)

importGQLDocument :: FilePath -> Q [Dec]
importGQLDocument :: FilePath -> Q [Dec]
importGQLDocument = CodeGenConfig -> FilePath -> Q [Dec]
importServerTypeDefinitions CodeGenConfig {namespace :: Bool
namespace = Bool
False}

importGQLDocumentWithNamespace :: FilePath -> Q [Dec]
importGQLDocumentWithNamespace :: FilePath -> Q [Dec]
importGQLDocumentWithNamespace = CodeGenConfig -> FilePath -> Q [Dec]
importServerTypeDefinitions CodeGenConfig {namespace :: Bool
namespace = Bool
True}

{-# DEPRECATED toGraphQLDocument "use Data.Morpheus.Server.printSchema" #-}
toGraphQLDocument ::
  RootResolverConstraint m event query mut sub =>
  proxy (RootResolver m event query mut sub) ->
  ByteString
toGraphQLDocument :: forall (m :: * -> *) event (query :: (* -> *) -> *)
       (mut :: (* -> *) -> *) (sub :: (* -> *) -> *) (proxy :: * -> *).
RootResolverConstraint m event query mut sub =>
proxy (RootResolver m event query mut sub) -> ByteString
toGraphQLDocument = forall (m :: * -> *) event (query :: (* -> *) -> *)
       (mut :: (* -> *) -> *) (sub :: (* -> *) -> *) (proxy :: * -> *).
RootResolverConstraint m event query mut sub =>
proxy (RootResolver m event query mut sub) -> ByteString
printSchema