{-# LANGUAGE NoImplicitPrelude #-}
module Data.Morpheus.CodeGen.Internal.AST
( ModuleDefinition (..),
CodeGenConfig (..),
ServerTypeDefinition (..),
GQLTypeDefinition (..),
CONST,
TypeKind (..),
TypeName,
TypeRef (..),
TypeWrapper (..),
unpackName,
DerivingClass (..),
FIELD_TYPE_WRAPPER (..),
ServerConstructorDefinition (..),
ServerFieldDefinition (..),
Kind (..),
)
where
import Data.Morpheus.Types.Internal.AST
( CONST,
Description,
Directives,
FieldName,
TypeKind (..),
TypeKind,
TypeName,
TypeName,
TypeRef (..),
TypeRef,
TypeWrapper (..),
Value,
unpackName,
)
import Relude
data ModuleDefinition = ModuleDefinition
{ moduleName :: Text,
imports :: [(Text, [Text])],
extensions :: [Text],
types :: [ServerTypeDefinition]
}
data FIELD_TYPE_WRAPPER
= MONAD
| SUBSCRIPTION
| PARAMETRIZED
| ARG TypeName
| TAGGED_ARG FieldName TypeRef
| GQL_WRAPPER TypeWrapper
deriving (Show)
data DerivingClass
= SHOW
| GENERIC
deriving (Show)
data ServerFieldDefinition = ServerFieldDefinition
{ fieldType :: Text,
fieldName :: FieldName,
wrappers :: [FIELD_TYPE_WRAPPER]
}
deriving (Show)
data Kind = Scalar | Type deriving (Show)
data GQLTypeDefinition = GQLTypeDefinition
{ gqlKind :: Kind,
gqlTypeDescription :: Maybe Text,
gqlTypeDescriptions :: Map Text Description,
gqlTypeDirectives :: Map Text (Directives CONST),
gqlTypeDefaultValues :: Map Text (Value CONST)
}
deriving (Show)
data ServerConstructorDefinition = ServerConstructorDefinition
{ constructorName :: TypeName,
constructorFields :: [ServerFieldDefinition]
}
deriving (Show)
data ServerTypeDefinition
= ServerTypeDefinition
{ tName :: Text,
typeParameters :: [Text],
tCons :: [ServerConstructorDefinition],
tKind :: TypeKind,
derives :: [DerivingClass],
gql :: Maybe GQLTypeDefinition
}
| ServerInterfaceDefinition
TypeName
TypeName
TypeName
deriving (Show)
newtype CodeGenConfig = CodeGenConfig
{ namespace :: Bool
}