{-# LANGUAGE DataKinds #-}
{-# LANGUAGE PolyKinds #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE NoImplicitPrelude #-}

-- | associating types to GraphQL Kinds
module Data.Morpheus.Server.Types.Kind
  ( SCALAR,
    DerivingKind,
    TYPE,
    CUSTOM,
    WRAPPER,
    DIRECTIVE,
  )
where

import Relude

data DerivingKind
  = DERIVING_SCALAR
  | DERIVING_TYPE
  | DERIVING_WRAPPER
  | DERIVING_CUSTOM
  | DERIVING_DIRECTIVE
  deriving (Int -> DerivingKind -> ShowS
[DerivingKind] -> ShowS
DerivingKind -> String
(Int -> DerivingKind -> ShowS)
-> (DerivingKind -> String)
-> ([DerivingKind] -> ShowS)
-> Show DerivingKind
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> DerivingKind -> ShowS
showsPrec :: Int -> DerivingKind -> ShowS
$cshow :: DerivingKind -> String
show :: DerivingKind -> String
$cshowList :: [DerivingKind] -> ShowS
showList :: [DerivingKind] -> ShowS
Show)

-- | GraphQL Scalar: Int, Float, String, Boolean or any user defined custom Scalar type
type SCALAR = 'DERIVING_SCALAR

-- | GraphQL input, type, union , enum
type TYPE = 'DERIVING_TYPE

-- | GraphQL Arrays , Resolvers and NonNull fields
type WRAPPER = 'DERIVING_WRAPPER

-- | GraphQL Arrays , Resolvers and NonNull fields
type DIRECTIVE = 'DERIVING_DIRECTIVE

-- | GraphQL Custom Types
type CUSTOM = 'DERIVING_CUSTOM