{-# 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 (DirectiveLocation -> DirectiveLocation -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DirectiveLocation -> DirectiveLocation -> Bool
$c/= :: DirectiveLocation -> DirectiveLocation -> Bool
== :: DirectiveLocation -> DirectiveLocation -> Bool
$c== :: DirectiveLocation -> DirectiveLocation -> Bool
Eq, forall t.
(forall (m :: * -> *). Quote m => t -> m Exp)
-> (forall (m :: * -> *). Quote m => t -> Code m t) -> Lift t
forall (m :: * -> *). Quote m => DirectiveLocation -> m Exp
forall (m :: * -> *).
Quote m =>
DirectiveLocation -> Code m DirectiveLocation
liftTyped :: forall (m :: * -> *).
Quote m =>
DirectiveLocation -> Code m DirectiveLocation
$cliftTyped :: forall (m :: * -> *).
Quote m =>
DirectiveLocation -> Code m DirectiveLocation
lift :: forall (m :: * -> *). Quote m => DirectiveLocation -> m Exp
$clift :: forall (m :: * -> *). Quote m => DirectiveLocation -> m Exp
Lift)

instance Show DirectiveLocation where
  show :: DirectiveLocation -> String
show DirectiveLocation
LOCATION_QUERY = String
"QUERY"
  show DirectiveLocation
LOCATION_MUTATION = String
"MUTATION"
  show DirectiveLocation
LOCATION_SUBSCRIPTION = String
"SUBSCRIPTION"
  show DirectiveLocation
LOCATION_FIELD = String
"FIELD"
  show DirectiveLocation
LOCATION_FRAGMENT_DEFINITION = String
"FRAGMENT_DEFINITION"
  show DirectiveLocation
LOCATION_FRAGMENT_SPREAD = String
"FRAGMENT_SPREAD"
  show DirectiveLocation
LOCATION_INLINE_FRAGMENT = String
"INLINE_FRAGMENT"
  show DirectiveLocation
LOCATION_SCHEMA = String
"SCHEMA"
  show DirectiveLocation
LOCATION_SCALAR = String
"SCALAR"
  show DirectiveLocation
LOCATION_OBJECT = String
"OBJECT"
  show DirectiveLocation
LOCATION_FIELD_DEFINITION = String
"FIELD_DEFINITION"
  show DirectiveLocation
LOCATION_ARGUMENT_DEFINITION = String
"ARGUMENT_DEFINITION"
  show DirectiveLocation
LOCATION_INTERFACE = String
"INTERFACE"
  show DirectiveLocation
LOCATION_UNION = String
"UNION"
  show DirectiveLocation
LOCATION_ENUM = String
"ENUM"
  show DirectiveLocation
LOCATION_ENUM_VALUE = String
"ENUM_VALUE"
  show DirectiveLocation
LOCATION_INPUT_OBJECT = String
"INPUT_OBJECT"
  show DirectiveLocation
LOCATION_INPUT_FIELD_DEFINITION = String
"INPUT_FIELD_DEFINITION"

instance Msg DirectiveLocation where
  msg :: DirectiveLocation -> GQLError
msg = forall a. Msg a => a -> GQLError
msg forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. Show a => a -> String
show

instance RenderGQL DirectiveLocation where
  renderGQL :: DirectiveLocation -> Rendering
renderGQL = forall a. Show a => a -> Rendering
fromShow