morpheus-graphql-0.2.2: src/Data/Morpheus/Error/Document/Interface.hs
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE OverloadedStrings #-}
module Data.Morpheus.Error.Document.Interface
( unknownInterface
, partialImplements
, ImplementsError(..)
) where
import Data.Morpheus.Error.Utils (globalErrorMessage)
import Data.Morpheus.Types.Internal.Base (Key)
import Data.Morpheus.Types.Internal.Validation (GQLError (..), GQLErrors)
import Data.Semigroup ((<>))
unknownInterface :: Key -> GQLErrors
unknownInterface name = globalErrorMessage message
where
message = "Unknown Interface \"" <> name <> "\"."
data ImplementsError
= UnexpectedType { expectedType :: Key
, foundType :: Key }
| UndefinedField
partialImplements :: Key -> [(Key, Key, ImplementsError)] -> GQLErrors
partialImplements name = map impError
where
impError (interfaceName, key, errorType) = GQLError {desc = message, positions = []}
where
message =
"type \"" <> name <> "\" implements Interface \"" <> interfaceName <> "\" Partially," <>
detailedMessage errorType
detailedMessage UnexpectedType {expectedType, foundType} =
" on key \"" <> key <> "\" expected type \"" <> expectedType <> "\" found \"" <> foundType <> "\"."
detailedMessage UndefinedField = " key \"" <> key <> "\" not found ."