{-# LANGUAGE NoImplicitPrelude #-}

module Data.Morpheus.Client.Internal.Types
  ( ClientTypeDefinition (..),
    TypeNameTH (..),
    ClientDefinition (..),
  )
where

import Data.Morpheus.Types.Internal.AST
  ( ANY,
    ConsD (..),
    TypeKind,
    TypeNameTH (..),
    VALID,
  )
import Relude

data ClientTypeDefinition = ClientTypeDefinition
  { ClientTypeDefinition -> TypeNameTH
clientTypeName :: TypeNameTH,
    ClientTypeDefinition -> [ConsD ANY VALID]
clientCons :: [ConsD ANY VALID],
    ClientTypeDefinition -> TypeKind
clientKind :: TypeKind
  }
  deriving (Int -> ClientTypeDefinition -> ShowS
[ClientTypeDefinition] -> ShowS
ClientTypeDefinition -> String
(Int -> ClientTypeDefinition -> ShowS)
-> (ClientTypeDefinition -> String)
-> ([ClientTypeDefinition] -> ShowS)
-> Show ClientTypeDefinition
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [ClientTypeDefinition] -> ShowS
$cshowList :: [ClientTypeDefinition] -> ShowS
show :: ClientTypeDefinition -> String
$cshow :: ClientTypeDefinition -> String
showsPrec :: Int -> ClientTypeDefinition -> ShowS
$cshowsPrec :: Int -> ClientTypeDefinition -> ShowS
Show)

data ClientDefinition = ClientDefinition
  { ClientDefinition -> Maybe ClientTypeDefinition
clientArguments :: Maybe ClientTypeDefinition,
    ClientDefinition -> [ClientTypeDefinition]
clientTypes :: [ClientTypeDefinition]
  }
  deriving (Int -> ClientDefinition -> ShowS
[ClientDefinition] -> ShowS
ClientDefinition -> String
(Int -> ClientDefinition -> ShowS)
-> (ClientDefinition -> String)
-> ([ClientDefinition] -> ShowS)
-> Show ClientDefinition
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [ClientDefinition] -> ShowS
$cshowList :: [ClientDefinition] -> ShowS
show :: ClientDefinition -> String
$cshow :: ClientDefinition -> String
showsPrec :: Int -> ClientDefinition -> ShowS
$cshowsPrec :: Int -> ClientDefinition -> ShowS
Show)