{-# LANGUAGE OverloadedStrings #-}
module Data.Morpheus.Error.Variable
( undefinedVariable
, unknownType
, variableGotInvalidValue
, uninitializedVariable
, unusedVariables
, incompatibleVariableType
) where
import Data.Morpheus.Error.Utils (errorMessage)
import Data.Morpheus.Types.Internal.Base (EnhancedKey (..), Position)
import Data.Morpheus.Types.Internal.Validation (GQLError (..), GQLErrors)
import Data.Semigroup ((<>))
import Data.Text (Text)
import qualified Data.Text as T (concat)
incompatibleVariableType :: Text -> Text -> Text -> Position -> GQLErrors
incompatibleVariableType variableName variableType argType argPosition =
errorMessage argPosition text
where
text =
"Variable \"$" <> variableName <> "\" of type \"" <> variableType <>
"\" used in position expecting type \"" <>
argType <>
"\"."
unusedVariables :: Text -> [EnhancedKey] -> GQLErrors
unusedVariables operator' = map keyToError
where
keyToError (EnhancedKey key' position') =
GQLError {desc = text key', positions = [position']}
text key' =
T.concat
[ "Variable \"$"
, key'
, "\" is never used in operation \""
, operator'
, "\"."
]
variableGotInvalidValue :: Text -> Text -> Position -> GQLErrors
variableGotInvalidValue name' inputMessage' position' =
errorMessage position' text
where
text =
T.concat ["Variable \"$", name', "\" got invalid value; ", inputMessage']
unknownType :: Text -> Position -> GQLErrors
unknownType type' position' = errorMessage position' text
where
text = T.concat ["Unknown type \"", type', "\"."]
undefinedVariable :: Text -> Position -> Text -> GQLErrors
undefinedVariable operation' position' key' = errorMessage position' text
where
text =
T.concat
[ "Variable \""
, key'
, "\" is not defined by operation \""
, operation'
, "\"."
]
uninitializedVariable :: Position -> Text -> Text -> GQLErrors
uninitializedVariable position' type' key' = errorMessage position' text
where
text =
T.concat
[ "Variable \"$"
, key'
, "\" of required type \""
, type'
, "!\" was not provided."
]