{-# LANGUAGE OverloadedStrings #-}
module Data.Morpheus.Error.Fragment
( cannotSpreadWithinItself
, cannotBeSpreadOnType
)
where
import Data.Semigroup ( (<>) )
import Data.Text ( Text
, intercalate
)
import qualified Data.Text as T
import Data.Morpheus.Error.Utils ( errorMessage )
import Data.Morpheus.Types.Internal.AST.Base
( Ref(..)
, Position
, GQLError(..)
, GQLErrors
)
cannotSpreadWithinItself :: [Ref] -> GQLErrors
cannotSpreadWithinItself fragments = [GQLError { message = text, locations = map refPosition fragments }]
where
text = "Cannot spread fragment \""
<> refName (head fragments)
<> "\" within itself via "
<> T.intercalate ", " (map refName fragments)
<> "."
cannotBeSpreadOnType :: Maybe Text -> Text -> Position -> [Text] -> GQLErrors
cannotBeSpreadOnType key fragmentType position typeMembers = errorMessage
position
msg
where
msg =
"Fragment "
<> getName key
<> "cannot be spread here as objects of type \""
<> intercalate ", " typeMembers
<> "\" can never be of type \""
<> fragmentType
<> "\"."
getName (Just x) = "\"" <> x <> "\" "
getName Nothing = ""