From c9e265f72c301a543091d58ec10863c66b279fd0 Mon Sep 17 00:00:00 2001 From: Eugen Wissner Date: Wed, 8 Jul 2020 08:16:14 +0200 Subject: Return parser error location in a list An error can have multiple locations which are returned in a listt with key "locations". --- src/Language/GraphQL.hs | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) (limited to 'src/Language/GraphQL.hs') diff --git a/src/Language/GraphQL.hs b/src/Language/GraphQL.hs index adda7a1..845d5cf 100644 --- a/src/Language/GraphQL.hs +++ b/src/Language/GraphQL.hs @@ -8,6 +8,7 @@ module Language.GraphQL ) where import qualified Data.Aeson as Aeson +import qualified Data.Aeson.Types as Aeson import qualified Data.Sequence as Seq import Data.Text (Text) import Language.GraphQL.AST @@ -41,13 +42,16 @@ graphqlSubs schema operationName variableValues document' = pure $ Aeson.object [("data", data'')] formatResponse (Response data'' errors') = pure $ Aeson.object [ ("data", data'') - , ("errors", Aeson.toJSON $ toJSON <$> errors') + , ("errors", Aeson.toJSON $ fromError <$> errors') ] - toJSON Error{ line = 0, column = 0, ..} = + fromError Error{ locations = [], ..} = Aeson.object [("message", Aeson.toJSON message)] - toJSON Error{..} = Aeson.object + fromError Error{..} = Aeson.object [ ("message", Aeson.toJSON message) - , ("line", Aeson.toJSON line) + , ("locations", Aeson.listValue fromLocation locations) + ] + fromLocation Location{..} = Aeson.object + [ ("line", Aeson.toJSON line) , ("column", Aeson.toJSON column) ] executeRequest = execute schema operationName variableValues -- cgit v1.2.3