morpheus-graphql-0.7.0: 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.AST.Base
( Key )
import Data.Morpheus.Types.Internal.Resolving.Core
( 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 { message = message
, locations = []
}
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 ."