module Language.GraphQL
( graphql
, graphqlSubs
) where
import Control.Monad.IO.Class (MonadIO)
import qualified Data.Aeson as Aeson
import Data.List.NonEmpty (NonEmpty)
import qualified Data.Text as T
import Language.GraphQL.Error
import Language.GraphQL.Execute
import Language.GraphQL.AST.Parser
import qualified Language.GraphQL.Schema as Schema
import Text.Megaparsec (parse)
graphql :: MonadIO m
=> NonEmpty (Schema.Resolver m)
-> T.Text
-> m Aeson.Value
graphql = flip graphqlSubs $ const Nothing
graphqlSubs :: MonadIO m
=> NonEmpty (Schema.Resolver m)
-> Schema.Subs
-> T.Text
-> m Aeson.Value
graphqlSubs schema f
= either parseError (execute schema f)
. parse document ""