{-# LANGUAGE NoImplicitPrelude #-}

module Data.Morpheus.Server.Internal.TH.Types
  ( ServerTypeDefinition (..),
    ServerDec,
    ServerDecContext (..),
  )
where

import Control.Monad.Reader (Reader)
import Data.Morpheus.Types.Internal.AST
  ( ANY,
    ConsD (..),
    IN,
    TypeDefinition,
    TypeKind,
    TypeName,
  )
import Prelude
  ( Bool,
    Maybe,
    Show,
  )

--- Core
data ServerTypeDefinition cat s = ServerTypeDefinition
  { ServerTypeDefinition cat s -> TypeName
tName :: TypeName,
    ServerTypeDefinition cat s -> [ServerTypeDefinition IN s]
typeArgD :: [ServerTypeDefinition IN s],
    ServerTypeDefinition cat s -> [ConsD cat s]
tCons :: [ConsD cat s],
    ServerTypeDefinition cat s -> TypeKind
tKind :: TypeKind,
    ServerTypeDefinition cat s -> Maybe (TypeDefinition ANY s)
typeOriginal :: Maybe (TypeDefinition ANY s)
  }
  deriving (Int -> ServerTypeDefinition cat s -> ShowS
[ServerTypeDefinition cat s] -> ShowS
ServerTypeDefinition cat s -> String
(Int -> ServerTypeDefinition cat s -> ShowS)
-> (ServerTypeDefinition cat s -> String)
-> ([ServerTypeDefinition cat s] -> ShowS)
-> Show (ServerTypeDefinition cat s)
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
forall (cat :: TypeCategory) (s :: Stage).
Int -> ServerTypeDefinition cat s -> ShowS
forall (cat :: TypeCategory) (s :: Stage).
[ServerTypeDefinition cat s] -> ShowS
forall (cat :: TypeCategory) (s :: Stage).
ServerTypeDefinition cat s -> String
showList :: [ServerTypeDefinition cat s] -> ShowS
$cshowList :: forall (cat :: TypeCategory) (s :: Stage).
[ServerTypeDefinition cat s] -> ShowS
show :: ServerTypeDefinition cat s -> String
$cshow :: forall (cat :: TypeCategory) (s :: Stage).
ServerTypeDefinition cat s -> String
showsPrec :: Int -> ServerTypeDefinition cat s -> ShowS
$cshowsPrec :: forall (cat :: TypeCategory) (s :: Stage).
Int -> ServerTypeDefinition cat s -> ShowS
Show)

type ServerDec = Reader ServerDecContext

newtype ServerDecContext = ServerDecContext
  { ServerDecContext -> Bool
namespace :: Bool
  }