diff options
| author | Eugen Wissner <belka@caraus.de> | 2019-06-30 06:07:32 +0200 |
|---|---|---|
| committer | Eugen Wissner <belka@caraus.de> | 2019-06-30 06:07:32 +0200 |
| commit | f64e186c60a94223eb4b5a156d986a4c78c025c7 (patch) | |
| tree | aa3159e86132eacfefec98a9105ad05173c99ae1 /Data/GraphQL/Error.hs | |
| parent | 28aaa6a70b7d8301cb94e7dc112dc292627f0ef9 (diff) | |
| download | graphql-f64e186c60a94223eb4b5a156d986a4c78c025c7.tar.gz | |
Move the source code into src/
Diffstat (limited to 'Data/GraphQL/Error.hs')
| -rw-r--r-- | Data/GraphQL/Error.hs | 57 |
1 files changed, 0 insertions, 57 deletions
diff --git a/Data/GraphQL/Error.hs b/Data/GraphQL/Error.hs deleted file mode 100644 index 08d1622..0000000 --- a/Data/GraphQL/Error.hs +++ /dev/null @@ -1,57 +0,0 @@ -{-# LANGUAGE OverloadedStrings #-} -module Data.GraphQL.Error - ( parseError - , CollectErrsT - , addErr - , addErrMsg - , runCollectErrs - , runAppendErrs - ) where - -import qualified Data.Aeson as Aeson -import Data.Text (Text, pack) -import Control.Monad.Trans.Class (lift) -import Control.Monad.Trans.State ( StateT - , modify - , runStateT - ) - --- | Wraps a parse error into a list of errors. -parseError :: Applicative f => String -> f Aeson.Value -parseError s = - pure $ Aeson.object [("errors", Aeson.toJSON [makeErrorMsg $ pack s])] - --- | A wrapper to pass error messages around. -type CollectErrsT m = StateT [Aeson.Value] m - --- | Adds an error to the list of errors. -addErr :: Monad m => Aeson.Value -> CollectErrsT m () -addErr v = modify (v :) - -makeErrorMsg :: Text -> Aeson.Value -makeErrorMsg s = Aeson.object [("message", Aeson.toJSON s)] - --- | Convenience function for just wrapping an error message. -addErrMsg :: Monad m => Text -> CollectErrsT m () -addErrMsg = addErr . makeErrorMsg - --- | Appends the given list of errors to the current list of errors. -appendErrs :: Monad m => [Aeson.Value] -> CollectErrsT m () -appendErrs errs = modify (errs ++) - --- | Runs the given query computation, but collects the errors into an error --- list, which is then sent back with the data. -runCollectErrs :: Monad m => CollectErrsT m Aeson.Value -> m Aeson.Value -runCollectErrs res = do - (dat, errs) <- runStateT res [] - if null errs - then return $ Aeson.object [("data", dat)] - else return $ Aeson.object [("data", dat), ("errors", Aeson.toJSON $ reverse errs)] - --- | Runs the given computation, collecting the errors and appending them --- to the previous list of errors. -runAppendErrs :: Monad m => CollectErrsT m a -> CollectErrsT m a -runAppendErrs f = do - (v, errs) <- lift $ runStateT f [] - appendErrs errs - return v |
