diff options
| author | Eugen Wissner <belka@caraus.de> | 2022-03-23 21:58:12 +0100 |
|---|---|---|
| committer | Eugen Wissner <belka@caraus.de> | 2022-03-23 22:07:20 +0100 |
| commit | c93c64a7f4828a202770b1cfadc79f28aba1da99 (patch) | |
| tree | 6dcd83f518c486f8db3be716e2dd49de9e9098cd /src/Language/GraphQL/Foundation.hs | |
| parent | 0cf459b8eb9e4847f9b199566d130e816760a0d3 (diff) | |
| download | graphql-spice-c93c64a7f4828a202770b1cfadc79f28aba1da99.tar.gz | |
Put test helpers into Test.Hspec.GraphQL
Diffstat (limited to 'src/Language/GraphQL/Foundation.hs')
| -rw-r--r-- | src/Language/GraphQL/Foundation.hs | 58 |
1 files changed, 0 insertions, 58 deletions
diff --git a/src/Language/GraphQL/Foundation.hs b/src/Language/GraphQL/Foundation.hs deleted file mode 100644 index 4d0d4f3..0000000 --- a/src/Language/GraphQL/Foundation.hs +++ /dev/null @@ -1,58 +0,0 @@ -{-# LANGUAGE OverloadedStrings #-} -{-# LANGUAGE NamedFieldPuns #-} -{-# LANGUAGE RecordWildCards #-} - -module Language.GraphQL.Foundation - ( module Language.GraphQL.Serialize - , graphql - ) where - -import Language.GraphQL.Serialize -import Control.Monad.Catch (MonadCatch) -import qualified Data.Aeson as Aeson -import qualified Data.Aeson.Types as Aeson -import Data.HashMap.Strict (HashMap) -import qualified Data.Aeson.KeyMap as KeyMap -import Data.Maybe (catMaybes) -import qualified Data.Sequence as Seq -import Data.Text (Text) -import Data.Vector (Vector) -import qualified Data.Vector as Vector -import qualified Language.GraphQL as GraphQL -import Language.GraphQL.AST -import Language.GraphQL.Error -import Language.GraphQL.Type.Schema (Schema) -import Data.Bifunctor (Bifunctor(..)) - --- | If the text parses correctly as a @GraphQL@ query the query is --- executed using the given 'Schema'. -graphql :: MonadCatch m - => Schema m -- ^ Resolvers. - -> Text -- ^ Text representing a @GraphQL@ request document. - -> m (Either (ResponseEventStream m Aeson.Value) Aeson.Object) -- ^ Response. -graphql schema = fmap (bimap stream formatResponse) - . GraphQL.graphql schema mempty (mempty :: HashMap Name JSON) - where - stream :: ResponseEventStream m JSON -> ResponseEventStream m Aeson.Value - stream = undefined - formatResponse :: Response JSON -> Aeson.Object - formatResponse Response{ errors, data' = JSON json } = - let dataResponse = KeyMap.singleton "data" json - in case errors of - Seq.Empty -> dataResponse - _ -> flip (KeyMap.insert "errors") dataResponse - $ Aeson.Array $ foldr fromError mempty errors - fromError :: Error -> Vector Aeson.Value -> Vector Aeson.Value - fromError Error{..} = Vector.cons $ Aeson.object $ catMaybes - [ Just ("message", Aeson.String message) - , toMaybe fromLocation "locations" locations - , toMaybe fromPath "path" path - ] - fromPath (Segment segment) = Aeson.String segment - fromPath (Index index) = Aeson.toJSON index - fromLocation Location{..} = Aeson.object - [ ("line", Aeson.toJSON line) - , ("column", Aeson.toJSON column) - ] - toMaybe _ _ [] = Nothing - toMaybe f key xs = Just (key, Aeson.listValue f xs) |
