summaryrefslogtreecommitdiff
path: root/src/Language/GraphQL/AST/Document.hs
diff options
context:
space:
mode:
authorEugen Wissner <belka@caraus.de>2019-12-26 13:00:47 +0100
committerEugen Wissner <belka@caraus.de>2019-12-26 13:07:21 +0100
commit56d88310df7c92a1721cc0dfa08a1d232c47c14b (patch)
tree15604a675752a64e4a3be68e8848c7133e7ad5c8 /src/Language/GraphQL/AST/Document.hs
parente3a495a778e8ccec18e5d5c494ab3b0eed31b13c (diff)
downloadgraphql-56d88310df7c92a1721cc0dfa08a1d232c47c14b.tar.gz
Add definition module
Diffstat (limited to 'src/Language/GraphQL/AST/Document.hs')
-rw-r--r--src/Language/GraphQL/AST/Document.hs107
1 files changed, 107 insertions, 0 deletions
diff --git a/src/Language/GraphQL/AST/Document.hs b/src/Language/GraphQL/AST/Document.hs
new file mode 100644
index 0000000..0350ce1
--- /dev/null
+++ b/src/Language/GraphQL/AST/Document.hs
@@ -0,0 +1,107 @@
+-- | This module defines data structures representing a GraphQL document.
+module Language.GraphQL.AST.Document
+ ( Definition(..)
+ , Document
+ , ExecutableDefinition(..)
+ ) where
+
+import Data.List.NonEmpty (NonEmpty)
+import Data.Text (Text)
+import Language.GraphQL.AST
+ ( ExecutableDefinition(..)
+ , Directive
+ , Name
+ , OperationType
+ , Type
+ , Value
+ )
+import Language.GraphQL.AST.DirectiveLocation
+
+-- | GraphQL document.
+type Document = NonEmpty Definition
+
+type NamedType = Name
+
+newtype Description = Description (Maybe Text)
+ deriving (Eq, Show)
+
+type RootOperationTypeDefinitions = NonEmpty RootOperationTypeDefinition
+
+data RootOperationTypeDefinition
+ = RootOperationTypeDefinition OperationType NamedType
+ deriving (Eq, Show)
+
+-- | All kinds of definitions that can occur in a GraphQL document.
+data Definition
+ = ExecutableDefinition ExecutableDefinition
+ | TypeSystemDefinition TypeSystemDefinition
+ | TypeSystemExtension TypeSystemExtension
+ deriving (Eq, Show)
+
+data TypeSystemDefinition
+ = SchemaDefinition [Directive] RootOperationTypeDefinitions
+ | TypeDefinition TypeDefinition
+ | DirectiveDefinition Description Name ArgumentsDefinition DirectiveLocation
+ deriving (Eq, Show)
+
+data SchemaExtension
+ = SchemaOperationExtension [Directive] RootOperationTypeDefinitions
+ | SchemaDirectiveExtension (NonEmpty Directive)
+ deriving (Eq, Show)
+
+data TypeSystemExtension
+ = SchemaExtension SchemaExtension
+ | TypeExtension TypeExtension
+ deriving (Eq, Show)
+
+newtype ImplementsInterfaces = ImplementsInterfaces (NonEmpty NamedType)
+ deriving (Eq, Show)
+newtype ImplementsInterfacesOpt = ImplementsInterfacesOpt [NamedType]
+ deriving (Eq, Show)
+
+newtype UnionMemberTypes = UnionMemberTypes (NonEmpty NamedType)
+ deriving (Eq, Show)
+newtype UnionMemberTypesOpt = UnionMemberTypesOpt [NamedType]
+ deriving (Eq, Show)
+
+newtype InputFieldsDefinition = InputFieldsDefinition (NonEmpty InputValueDefinition)
+ deriving (Eq, Show)
+newtype InputFieldsDefinitionOpt = InputFieldsDefinitionOpt [InputValueDefinition]
+ deriving (Eq, Show)
+
+data InputValueDefinition
+ = InputValueDefinition Description Name Type (Maybe Value) [Directive]
+ deriving (Eq, Show)
+
+newtype ArgumentsDefinition = ArgumentsDefinition [InputValueDefinition]
+ deriving (Eq, Show)
+
+data EnumValueDefinition = EnumValueDefinition Description Name [Directive]
+ deriving (Eq, Show)
+
+data FieldDefinition = FieldDefinition Description Name ArgumentsDefinition Type
+ deriving (Eq, Show)
+
+data TypeDefinition
+ = ScalarTypeDefinition Description Name [Directive]
+ | ObjectTypeDefinition Description Name ImplementsInterfacesOpt [Directive] [FieldDefinition]
+ | InterfaceTypeDefinition Description Name [Directive] [FieldDefinition]
+ | UnionTypeDefinition Description Name [Directive] UnionMemberTypesOpt
+ | EnumTypeDefinition Description Name [Directive] [EnumValueDefinition]
+ | InputObjectTypeDefinition Description Name [Directive] InputFieldsDefinitionOpt
+ deriving (Eq, Show)
+
+data TypeExtension
+ = ScalarTypeExtension Name (NonEmpty Directive)
+ | ObjectTypeFieldsDefinitionExtension Name ImplementsInterfacesOpt [Directive] (NonEmpty FieldDefinition)
+ | ObjectTypeDirectivesExtension Name ImplementsInterfacesOpt (NonEmpty Directive)
+ | ObjectTypeImplementsInterfacesExtension Name ImplementsInterfaces
+ | InterfaceTypeFieldsDefinitionExtension Name [Directive] (NonEmpty FieldDefinition)
+ | InterfaceTypeDirectivesExtension Name (NonEmpty Directive)
+ | UnionTypeUnionMemberTypesExtension Name [Directive] UnionMemberTypes
+ | UnionDirectivesExtension Name (NonEmpty Directive)
+ | EnumTypeEnumValuesDefinitionExtension Name [Directive] (NonEmpty EnumValueDefinition)
+ | EnumTypeDirectivesExtension Name (NonEmpty Directive)
+ | InputObjectTypeInputFieldsDefinitionExtension Name [Directive] InputFieldsDefinition
+ | InputObjectTypeDirectivesExtension Name (NonEmpty Directive)
+ deriving (Eq, Show)