{-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE NoImplicitPrelude #-} module Data.Morpheus.Client ( gql, Fetch (..), defineQuery, defineByDocument, defineByDocumentFile, defineByIntrospection, defineByIntrospectionFile, ScalarValue (..), DecodeScalar (..), EncodeScalar (..), ID (..), ) 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.Client.JSONSchema.Parse ( decodeIntrospection, ) import Data.Morpheus.Core ( parseFullSchema, ) import Data.Morpheus.Internal.Ext ( Eventless, ) import Data.Morpheus.QuasiQuoter (gql) import Data.Morpheus.Types.GQLScalar ( DecodeScalar (..), EncodeScalar (..), ) import Data.Morpheus.Types.ID (ID (..)) import Data.Morpheus.Types.Internal.AST ( ExecutableDocument, ScalarValue (..), Schema, VALID, ) import Language.Haskell.TH import Language.Haskell.TH.Syntax ( qAddDependentFile, ) import Relude hiding (ByteString) defineByDocumentFile :: FilePath -> (ExecutableDocument, String) -> Q [Dec] defineByDocumentFile :: FilePath -> (ExecutableDocument, FilePath) -> Q [Dec] defineByDocumentFile FilePath filePath (ExecutableDocument, FilePath) args = do FilePath -> Q () forall (m :: * -> *). Quasi m => FilePath -> m () qAddDependentFile FilePath filePath IO ByteString -> (ExecutableDocument, FilePath) -> Q [Dec] defineByDocument (FilePath -> IO ByteString L.readFile FilePath filePath) (ExecutableDocument, FilePath) args defineByIntrospectionFile :: FilePath -> (ExecutableDocument, String) -> Q [Dec] defineByIntrospectionFile :: FilePath -> (ExecutableDocument, FilePath) -> Q [Dec] defineByIntrospectionFile FilePath filePath (ExecutableDocument, FilePath) args = do FilePath -> Q () forall (m :: * -> *). Quasi m => FilePath -> m () qAddDependentFile FilePath filePath IO ByteString -> (ExecutableDocument, FilePath) -> Q [Dec] defineByIntrospection (FilePath -> IO ByteString L.readFile FilePath filePath) (ExecutableDocument, FilePath) args defineByDocument :: IO ByteString -> (ExecutableDocument, String) -> Q [Dec] defineByDocument :: IO ByteString -> (ExecutableDocument, FilePath) -> Q [Dec] defineByDocument IO ByteString doc = IO (Eventless (Schema VALID)) -> (ExecutableDocument, FilePath) -> Q [Dec] defineQuery (IO ByteString -> IO (Eventless (Schema VALID)) schemaByDocument IO ByteString doc) schemaByDocument :: IO ByteString -> IO (Eventless (Schema VALID)) schemaByDocument :: IO ByteString -> IO (Eventless (Schema VALID)) schemaByDocument = (ByteString -> Eventless (Schema VALID)) -> IO ByteString -> IO (Eventless (Schema VALID)) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b fmap ByteString -> Eventless (Schema VALID) parseFullSchema defineByIntrospection :: IO ByteString -> (ExecutableDocument, String) -> Q [Dec] defineByIntrospection :: IO ByteString -> (ExecutableDocument, FilePath) -> Q [Dec] defineByIntrospection IO ByteString json = IO (Eventless (Schema VALID)) -> (ExecutableDocument, FilePath) -> Q [Dec] defineQuery (ByteString -> Eventless (Schema VALID) decodeIntrospection (ByteString -> Eventless (Schema VALID)) -> IO ByteString -> IO (Eventless (Schema VALID)) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> IO ByteString json)