content: {-# LANGUAGE DeriveLift #-}
  {-# LANGUAGE NoImplicitPrelude #-}
  
  module Data.Morpheus.Types.Internal.AST.DirectiveLocation
    ( DirectiveLocation (..),
    )
  where
  
  import Data.Morpheus.Rendering.RenderGQL (RenderGQL (..), fromShow)
  import Data.Morpheus.Types.Internal.AST.Error (Msg (..))
  import Language.Haskell.TH.Syntax (Lift)
  import Relude hiding (Show, show)
  import Prelude (Show (..))
  
  data DirectiveLocation
    = LOCATION_QUERY
    | LOCATION_MUTATION
    | LOCATION_SUBSCRIPTION
    | LOCATION_FIELD
    | LOCATION_FRAGMENT_DEFINITION
    | LOCATION_FRAGMENT_SPREAD
    | LOCATION_INLINE_FRAGMENT
    | LOCATION_SCHEMA
    | LOCATION_SCALAR
    | LOCATION_OBJECT
    | LOCATION_FIELD_DEFINITION
    | LOCATION_ARGUMENT_DEFINITION
    | LOCATION_INTERFACE
    | LOCATION_UNION
    | LOCATION_ENUM
    | LOCATION_ENUM_VALUE
    | LOCATION_INPUT_OBJECT
    | LOCATION_INPUT_FIELD_DEFINITION
    deriving (Eq, Lift)
  
  instance Show DirectiveLocation where
    show LOCATION_QUERY = "QUERY"
    show LOCATION_MUTATION = "MUTATION"
    show LOCATION_SUBSCRIPTION = "SUBSCRIPTION"
    show LOCATION_FIELD = "FIELD"
    show LOCATION_FRAGMENT_DEFINITION = "FRAGMENT_DEFINITION"
    show LOCATION_FRAGMENT_SPREAD = "FRAGMENT_SPREAD"
    show LOCATION_INLINE_FRAGMENT = "INLINE_FRAGMENT"
    show LOCATION_SCHEMA = "SCHEMA"
    show LOCATION_SCALAR = "SCALAR"
    show LOCATION_OBJECT = "OBJECT"
    show LOCATION_FIELD_DEFINITION = "FIELD_DEFINITION"
    show LOCATION_ARGUMENT_DEFINITION = "ARGUMENT_DEFINITION"
    show LOCATION_INTERFACE = "INTERFACE"
    show LOCATION_UNION = "UNION"
    show LOCATION_ENUM = "ENUM"
    show LOCATION_ENUM_VALUE = "ENUM_VALUE"
    show LOCATION_INPUT_OBJECT = "INPUT_OBJECT"
    show LOCATION_INPUT_FIELD_DEFINITION = "INPUT_FIELD_DEFINITION"
  
  instance Msg DirectiveLocation where
    msg = msg . show
  
  instance RenderGQL DirectiveLocation where
    renderGQL = fromShow
  