-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | A client for Haskell programs to query a GraphQL API -- -- A client for Haskell programs to query a GraphQL API. @package graphql-client @version 1.2.0 -- | Imports needed for the generated API. module Data.GraphQL.Bootstrap -- | A space efficient, packed, unboxed Unicode text type. data Text (.=) :: (KeyValue kv, ToJSON v) => Key -> v -> kv infixr 8 .= -- | Create a Value from a list of name/value Pairs. If -- duplicate keys arise, later keys and their associated values win. object :: [Pair] -> Value -- | Make an enum type with the given constructors, that can be parsed from -- JSON. -- -- The FromJSON instance will match to a string value matching the -- constructor name, case-insensitive. -- --
-- mkEnum "State" ["OPEN", "CLOSED"] -- -- -- generates equivalent of: -- -- data State = OPEN | CLOSED deriving (...) -- -- genFromJSONEnum ''State -- -- genToJSONEnum ''State --mkEnum :: String -> [String] -> Q [Dec] -- | Monads in which IO computations may be embedded. Any monad -- built by applying a sequence of monad transformers to the IO -- monad will be an instance of this class. -- -- Instances should satisfy the following laws, which state that -- liftIO is a transformer of monads: -- -- class Monad m => MonadIO (m :: Type -> Type) -- | Definitions for GraphQL errors and exceptions. module Data.GraphQL.Error -- | An error in a GraphQL query. data GraphQLError GraphQLError :: Text -> Maybe [GraphQLErrorLoc] -> Maybe [Value] -> GraphQLError [message] :: GraphQLError -> Text [locations] :: GraphQLError -> Maybe [GraphQLErrorLoc] [path] :: GraphQLError -> Maybe [Value] -- | A location in an error in a GraphQL query. data GraphQLErrorLoc GraphQLErrorLoc :: Int -> Int -> GraphQLErrorLoc [errorLine] :: GraphQLErrorLoc -> Int [errorCol] :: GraphQLErrorLoc -> Int -- | An exception thrown as a result of an error in a GraphQL query. newtype GraphQLException GraphQLException :: [GraphQLError] -> GraphQLException instance Data.Aeson.Types.ToJSON.ToJSON Data.GraphQL.Error.GraphQLErrorLoc instance GHC.Generics.Generic Data.GraphQL.Error.GraphQLErrorLoc instance GHC.Classes.Eq Data.GraphQL.Error.GraphQLErrorLoc instance GHC.Show.Show Data.GraphQL.Error.GraphQLErrorLoc instance Data.Aeson.Types.FromJSON.FromJSON Data.GraphQL.Error.GraphQLError instance Data.Aeson.Types.ToJSON.ToJSON Data.GraphQL.Error.GraphQLError instance GHC.Generics.Generic Data.GraphQL.Error.GraphQLError instance GHC.Classes.Eq Data.GraphQL.Error.GraphQLError instance GHC.Show.Show Data.GraphQL.Error.GraphQLError instance GHC.Classes.Eq Data.GraphQL.Error.GraphQLException instance GHC.Exception.Type.Exception Data.GraphQL.Error.GraphQLException instance GHC.Show.Show Data.GraphQL.Error.GraphQLException instance Data.Aeson.Types.FromJSON.FromJSON Data.GraphQL.Error.GraphQLErrorLoc -- | Definitions needed by GraphQL queries. module Data.GraphQL.Query -- | A type class for defining GraphQL queries. -- -- Should be generated via the `graphql-codegen` command. Any manual -- instances needs to be certain that `getArgs query` satisfies the -- arguments defined in `getQueryText query`, and that the result adheres -- to `ResultSchema query`. class IsSchema (ResultSchema query) => GraphQLQuery query where { type ResultSchema query :: Schema; } getQueryName :: GraphQLQuery query => query -> Text getQueryText :: GraphQLQuery query => query -> Text getArgs :: GraphQLQuery query => query -> Value -- | A quasiquoter that interpolates the given string as raw text. -- -- Trying to avoid a dependency on raw-strings-qq query :: QuasiQuoter -- | Definitions parsing responses from a GraphQL API. module Data.GraphQL.Result -- | A result of a GraphQL query. data GraphQLResult r GraphQLResult :: [GraphQLError] -> Maybe r -> GraphQLResult r [resultErrors] :: GraphQLResult r -> [GraphQLError] [resultResult] :: GraphQLResult r -> Maybe r -- | Get the errors in the GraphQLResult. getErrors :: GraphQLResult r -> [GraphQLError] -- | Get the result of the GraphQLResult. getResult :: GraphQLResult r -> Maybe r instance Data.Traversable.Traversable Data.GraphQL.Result.GraphQLResult instance Data.Foldable.Foldable Data.GraphQL.Result.GraphQLResult instance GHC.Base.Functor Data.GraphQL.Result.GraphQLResult instance GHC.Show.Show r => GHC.Show.Show (Data.GraphQL.Result.GraphQLResult r) instance Data.Aeson.Types.FromJSON.FromJSON r => Data.Aeson.Types.FromJSON.FromJSON (Data.GraphQL.Result.GraphQLResult r) -- | Defines the MonadGraphQLQuery type class, which defines how -- GraphQL queries should be run. module Data.GraphQL.Monad.Class -- | A type class for monads that can run GraphQL queries. class Monad m => MonadGraphQLQuery m -- | Run the given query and return the GraphQLResult. runQuerySafe :: (MonadGraphQLQuery m, GraphQLQuery query, schema ~ ResultSchema query) => query -> m (GraphQLResult (Object schema)) -- | Run the given query and returns the result, erroring if the query -- returned errors. runQuery :: (MonadIO m, MonadGraphQLQuery m, GraphQLQuery query, schema ~ ResultSchema query) => query -> m (Object schema) instance Data.GraphQL.Monad.Class.MonadGraphQLQuery m => Data.GraphQL.Monad.Class.MonadGraphQLQuery (Control.Monad.Trans.Reader.ReaderT r m) instance Data.GraphQL.Monad.Class.MonadGraphQLQuery m => Data.GraphQL.Monad.Class.MonadGraphQLQuery (Control.Monad.Trans.Except.ExceptT e m) instance Data.GraphQL.Monad.Class.MonadGraphQLQuery m => Data.GraphQL.Monad.Class.MonadGraphQLQuery (Control.Monad.Trans.Identity.IdentityT m) instance Data.GraphQL.Monad.Class.MonadGraphQLQuery m => Data.GraphQL.Monad.Class.MonadGraphQLQuery (Control.Monad.Trans.Maybe.MaybeT m) instance (GHC.Base.Monoid w, Data.GraphQL.Monad.Class.MonadGraphQLQuery m) => Data.GraphQL.Monad.Class.MonadGraphQLQuery (Control.Monad.Trans.RWS.Lazy.RWST r w s m) instance (GHC.Base.Monoid w, Data.GraphQL.Monad.Class.MonadGraphQLQuery m) => Data.GraphQL.Monad.Class.MonadGraphQLQuery (Control.Monad.Trans.RWS.Strict.RWST r w s m) instance Data.GraphQL.Monad.Class.MonadGraphQLQuery m => Data.GraphQL.Monad.Class.MonadGraphQLQuery (Control.Monad.Trans.State.Lazy.StateT s m) instance Data.GraphQL.Monad.Class.MonadGraphQLQuery m => Data.GraphQL.Monad.Class.MonadGraphQLQuery (Control.Monad.Trans.State.Strict.StateT s m) instance (GHC.Base.Monoid w, Data.GraphQL.Monad.Class.MonadGraphQLQuery m) => Data.GraphQL.Monad.Class.MonadGraphQLQuery (Control.Monad.Trans.Writer.Lazy.WriterT w m) instance (GHC.Base.Monoid w, Data.GraphQL.Monad.Class.MonadGraphQLQuery m) => Data.GraphQL.Monad.Class.MonadGraphQLQuery (Control.Monad.Trans.Writer.Strict.WriterT w m) -- | Defines the MonadGraphQLQuery type class to query GraphQL APIs. -- Also provides the GraphQLQueryT monad transformer that can be -- added to a transformer stack to implement the type class, and the -- runQuerySafeIO function to manually implement it yourself. module Data.GraphQL.Monad -- | A type class for monads that can run GraphQL queries. class Monad m => MonadGraphQLQuery m -- | Run the given query and return the GraphQLResult. runQuerySafe :: (MonadGraphQLQuery m, GraphQLQuery query, schema ~ ResultSchema query) => query -> m (GraphQLResult (Object schema)) -- | Run the given query and returns the result, erroring if the query -- returned errors. runQuery :: (MonadIO m, MonadGraphQLQuery m, GraphQLQuery query, schema ~ ResultSchema query) => query -> m (Object schema) -- | Execute a GraphQL query with the given GraphQLManager. runQuerySafeIO :: (GraphQLQuery query, schema ~ ResultSchema query) => GraphQLManager -> query -> IO (GraphQLResult (Object schema)) -- | The settings for initializing a GraphQLManager. data GraphQLSettings GraphQLSettings :: ManagerSettings -> String -> (Request -> Request) -> GraphQLSettings -- | Uses TLS by default [managerSettings] :: GraphQLSettings -> ManagerSettings [url] :: GraphQLSettings -> String [modifyReq] :: GraphQLSettings -> Request -> Request -- | Default settings for GraphQLSettings. Requires url field -- to be overridden. -- -- Example usage: -- --
-- >>> defaultGraphQLSettings
-- ... { url = "https://api.github.com/graphql"
-- ... , modifyReq = \\req -> req
-- ... { requestHeaders =
-- ... (hAuthorization, "bearer my_github_token") : requestHeaders req
-- ... }
-- ... }
--
defaultGraphQLSettings :: GraphQLSettings
-- | The manager for running GraphQL queries.
data GraphQLManager
initGraphQLManager :: GraphQLSettings -> IO GraphQLManager
-- | The monad transformer type that can be used to run GraphQL queries.
--
--
-- newtype MyMonad a = MyMonad { unMyMonad :: GraphQLQueryT IO a }
--
-- runMyMonad :: MyMonad a -> IO a
-- runMyMonad = runGraphQLQueryT graphQLSettings . unMyMonad
-- where
-- graphQLSettings = defaultGraphQLSettings{url = "https://api.github.com/graphql"}
--
data GraphQLQueryT m a
-- | Run the GraphQLQueryT monad transformer.
runGraphQLQueryT :: MonadIO m => GraphQLSettings -> GraphQLQueryT m a -> m a
instance Control.Monad.Trans.Class.MonadTrans Data.GraphQL.Monad.GraphQLQueryT
instance Control.Monad.IO.Class.MonadIO m => Control.Monad.IO.Class.MonadIO (Data.GraphQL.Monad.GraphQLQueryT m)
instance GHC.Base.Monad m => GHC.Base.Monad (Data.GraphQL.Monad.GraphQLQueryT m)
instance GHC.Base.Applicative m => GHC.Base.Applicative (Data.GraphQL.Monad.GraphQLQueryT m)
instance GHC.Base.Functor m => GHC.Base.Functor (Data.GraphQL.Monad.GraphQLQueryT m)
instance Control.Monad.IO.Unlift.MonadUnliftIO m => Control.Monad.IO.Unlift.MonadUnliftIO (Data.GraphQL.Monad.GraphQLQueryT m)
instance Control.Monad.IO.Class.MonadIO m => Data.GraphQL.Monad.Class.MonadGraphQLQuery (Data.GraphQL.Monad.GraphQLQueryT m)
-- | Core functionality for querying GraphQL APIs.
module Data.GraphQL
-- | Defines test utilities for testing GraphQL queries.
module Data.GraphQL.TestUtils
data ResultMock query
ResultMock :: query -> Value -> ResultMock query
[query] :: ResultMock query -> query
[result] :: ResultMock query -> Value
mocked :: (Show query, GraphQLQuery query) => ResultMock query -> AnyResultMock
data MockQueryT m a
runMockQueryT :: Monad m => MockQueryT m a -> [AnyResultMock] -> m a
data AnyResultMock
instance GHC.Show.Show query => GHC.Show.Show (Data.GraphQL.TestUtils.ResultMock query)
instance Control.Monad.Trans.Class.MonadTrans Data.GraphQL.TestUtils.MockQueryT
instance GHC.Base.Monad m => Control.Monad.State.Class.MonadState [Data.GraphQL.TestUtils.AnyResultMock] (Data.GraphQL.TestUtils.MockQueryT m)
instance Control.Monad.IO.Class.MonadIO m => Control.Monad.IO.Class.MonadIO (Data.GraphQL.TestUtils.MockQueryT m)
instance GHC.Base.Monad m => GHC.Base.Monad (Data.GraphQL.TestUtils.MockQueryT m)
instance GHC.Base.Monad m => GHC.Base.Applicative (Data.GraphQL.TestUtils.MockQueryT m)
instance GHC.Base.Functor m => GHC.Base.Functor (Data.GraphQL.TestUtils.MockQueryT m)
instance GHC.Show.Show Data.GraphQL.TestUtils.AnyResultMock
instance GHC.Base.Monad m => Data.GraphQL.Monad.Class.MonadGraphQLQuery (Data.GraphQL.TestUtils.MockQueryT m)