{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE OverloadedStrings #-}
module Data.Morpheus.Error.Warning
( renderGQLErrors,
deprecatedEnum,
deprecatedField,
gqlWarnings,
)
where
import Data.Aeson (encode)
import Data.ByteString.Lazy.Char8 (unpack)
import Data.Foldable (traverse_)
import Data.Morpheus.Error.Utils (errorMessage)
import Data.Morpheus.Types.Internal.AST.Base
( Description,
FieldName,
GQLErrors,
Ref (..),
msg,
)
import Data.Semigroup ((<>))
import Language.Haskell.TH
( Q,
reportWarning,
)
renderGQLErrors :: GQLErrors -> String
renderGQLErrors = unpack . encode
deprecatedEnum :: FieldName -> Ref -> Maybe Description -> GQLErrors
deprecatedEnum typeName Ref {refPosition, refName} reason =
errorMessage refPosition $
"the enum value "
<> msg typeName
<> "."
<> msg refName
<> " is deprecated."
<> msg (maybe "" (" " <>) reason)
deprecatedField :: FieldName -> Ref -> Maybe Description -> GQLErrors
deprecatedField typeName Ref {refPosition, refName} reason =
errorMessage refPosition $
"the field "
<> msg typeName
<> "."
<> msg refName
<> " is deprecated."
<> msg (maybe "" (" " <>) reason)
gqlWarnings :: GQLErrors -> Q ()
gqlWarnings [] = pure ()
gqlWarnings warnings = traverse_ handleWarning warnings
where
handleWarning warning =
reportWarning ("Morpheus GraphQL Warning: " <> (unpack . encode) warning)