From 91bb7856e7d5e05e2b8adbed653cc592d434cc79 Mon Sep 17 00:00:00 2001 From: Alejandro Serrano Date: Thu, 5 Mar 2020 14:31:29 +0100 Subject: [PATCH] Run the entire pipeline! --- graphql/src/Mu/GraphQL/Query/Run.hs | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/graphql/src/Mu/GraphQL/Query/Run.hs b/graphql/src/Mu/GraphQL/Query/Run.hs index 915c6f2..9e18a71 100644 --- a/graphql/src/Mu/GraphQL/Query/Run.hs +++ b/graphql/src/Mu/GraphQL/Query/Run.hs @@ -3,6 +3,7 @@ {-# language FlexibleInstances #-} {-# language GADTs #-} {-# language MultiParamTypeClasses #-} +{-# language OverloadedLists #-} {-# language OverloadedStrings #-} {-# language PolyKinds #-} {-# language ScopedTypeVariables #-} @@ -11,11 +12,16 @@ {-# language TypeOperators #-} {-# language UndecidableInstances #-} {-# OPTIONS_GHC -fprint-explicit-foralls #-} -module Mu.GraphQL.Query.Run where +module Mu.GraphQL.Query.Run ( + runPipeline +, runDocument +, runQuery +) where import Control.Monad.Except (runExceptT) import Control.Monad.Writer import qualified Data.Aeson as Aeson +import qualified Data.Aeson.Types as Aeson import Data.Functor.Identity import Data.Maybe import qualified Data.Text as T @@ -48,10 +54,23 @@ runPipeline -> IO Aeson.Value runPipeline svr _ _ doc = case parseDoc doc of - Nothing -> undefined + Nothing -> + return $ + Aeson.object [ + ("errors", Aeson.Array [ + Aeson.object [ ("message", Aeson.String "cannot parse document") ] ])] Just (d :: Document p qr mut) -> do (data_, errors) <- runWriterT (runDocument svr d) - return $ Aeson.object [ ("data", data_) ] + case errors of + [] -> return $ Aeson.object [ ("data", data_) ] + _ -> return $ Aeson.object [ ("data", data_), ("errors", Aeson.listValue errValue errors) ] + where + errValue :: GraphQLError -> Aeson.Value + errValue (GraphQLError (ServerError _ msg) path) + = Aeson.object [ + ("message", Aeson.String $ T.pack msg) + , ("path", Aeson.toJSON path) + ] runDocument