{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE NoImplicitPrelude #-}

module Data.Morpheus.Error.Utils
  ( errorMessage,
    globalErrorMessage,
    badRequestError,
    validationErrorMessage,
  )
where

import Data.ByteString.Lazy.Char8
  ( ByteString,
    pack,
  )
import Data.Morpheus.Types.Internal.AST.Base
  ( GQLError (..),
    GQLErrors,
    Message,
    Position (..),
    ValidationError (..),
  )
import Relude hiding (ByteString)

validationErrorMessage :: Maybe Position -> Message -> ValidationError
validationErrorMessage :: Maybe Position -> Message -> ValidationError
validationErrorMessage Maybe Position
pos Message
message = Message -> [Position] -> ValidationError
ValidationError Message
message (Maybe Position -> [Position]
forall a. Maybe a -> [a]
maybeToList Maybe Position
pos)

errorMessage :: Position -> Message -> GQLErrors
errorMessage :: Position -> Message -> GQLErrors
errorMessage Position
position Message
message = [GQLError :: Message -> [Position] -> GQLError
GQLError {Message
message :: Message
message :: Message
message, locations :: [Position]
locations = [Position
position]}]

globalErrorMessage :: Message -> GQLErrors
globalErrorMessage :: Message -> GQLErrors
globalErrorMessage Message
message = [GQLError :: Message -> [Position] -> GQLError
GQLError {Message
message :: Message
message :: Message
message, locations :: [Position]
locations = []}]

badRequestError :: String -> ByteString
badRequestError :: String -> ByteString
badRequestError = (ByteString
"Bad Request. Could not decode Request body: " ByteString -> ByteString -> ByteString
forall a. Semigroup a => a -> a -> a
<>) (ByteString -> ByteString)
-> (String -> ByteString) -> String -> ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> ByteString
pack