{-# LANGUAGE FlexibleContexts #-}
module Data.Morpheus.Client
( gql,
Fetch (..),
defineQuery,
defineByDocument,
defineByDocumentFile,
defineByIntrospection,
defineByIntrospectionFile,
)
where
import Data.ByteString.Lazy (ByteString)
import qualified Data.ByteString.Lazy as L
( readFile,
)
import Data.Morpheus.Client.Build
( defineQuery,
)
import Data.Morpheus.Client.Fetch
( Fetch (..),
)
import Data.Morpheus.Core
( decodeIntrospection,
parseFullGQLDocument,
)
import Data.Morpheus.QuasiQuoter (gql)
import Data.Morpheus.Types.Internal.AST
( GQLQuery,
Schema,
)
import Data.Morpheus.Types.Internal.Resolving
( Eventless,
)
import Language.Haskell.TH
defineByDocumentFile :: String -> (GQLQuery, String) -> Q [Dec]
defineByDocumentFile = defineByDocument . L.readFile
defineByIntrospectionFile :: String -> (GQLQuery, String) -> Q [Dec]
defineByIntrospectionFile = defineByIntrospection . L.readFile
defineByDocument :: IO ByteString -> (GQLQuery, String) -> Q [Dec]
defineByDocument doc = defineQuery (schemaByDocument doc)
schemaByDocument :: IO ByteString -> IO (Eventless Schema)
schemaByDocument documentGQL = parseFullGQLDocument <$> documentGQL
defineByIntrospection :: IO ByteString -> (GQLQuery, String) -> Q [Dec]
defineByIntrospection json = defineQuery (decodeIntrospection <$> json)