summaryrefslogtreecommitdiff
path: root/Data/GraphQL
diff options
context:
space:
mode:
authorDanny Navarro <j@dannynavarro.net>2015-09-12 15:16:28 +0200
committerDanny Navarro <j@dannynavarro.net>2015-09-12 15:16:28 +0200
commit0f673b9b4dc6d1ab53dba0afa347479f86a0308c (patch)
tree989a6e41d7de300ad30148454c2ded83d8ce4980 /Data/GraphQL
parent50a0c953d35acecf46736c05bed717416fa7c279 (diff)
downloadgraphql-0f673b9b4dc6d1ab53dba0afa347479f86a0308c.tar.gz
Rename module `Data.GraphQL` -> `Data.GraphQL.AST`
Diffstat (limited to 'Data/GraphQL')
-rw-r--r--Data/GraphQL/AST.hs140
1 files changed, 140 insertions, 0 deletions
diff --git a/Data/GraphQL/AST.hs b/Data/GraphQL/AST.hs
new file mode 100644
index 0000000..cf4041a
--- /dev/null
+++ b/Data/GraphQL/AST.hs
@@ -0,0 +1,140 @@
+module Data.GraphQL.AST where
+
+import Data.Text (Text)
+
+-- * Name
+
+type Name = Text
+
+-- * Document
+
+newtype Document = Document [Definition] deriving (Eq,Show)
+
+data Definition = DefinitionOperation OperationDefinition
+ | DefinitionFragment FragmentDefinition
+ | DefinitionType TypeDefinition
+ deriving (Eq,Show)
+
+data OperationDefinition =
+ Query (Maybe [VariableDefinition]) (Maybe [Directive]) SelectionSet
+ | Mutation (Maybe [VariableDefinition]) (Maybe [Directive]) SelectionSet
+ | Subscription (Maybe [VariableDefinition]) (Maybe [Directive]) SelectionSet
+ deriving (Eq,Show)
+
+data VariableDefinition = VariableDefinition Variable Type (Maybe DefaultValue)
+ deriving (Eq,Show)
+
+newtype Variable = Variable Name deriving (Eq,Show)
+
+newtype SelectionSet = SelectionSet [Selection] deriving (Eq,Show)
+
+data Selection = SelectionField Field
+ | SelectionFragmentSpread FragmentSpread
+ | SelectionInlineFragment InlineFragment
+ deriving (Eq,Show)
+
+data Field = Field (Maybe Alias) Name (Maybe [Argument])
+ (Maybe [Directive])
+ (Maybe SelectionSet)
+ deriving (Eq,Show)
+
+type Alias = Name
+
+data Argument = Argument Name Value deriving (Eq,Show)
+
+-- * Fragments
+
+data FragmentSpread = FragmentSpread Name (Maybe [Directive])
+ deriving (Eq,Show)
+
+data InlineFragment =
+ InlineFragment TypeCondition (Maybe [Directive]) SelectionSet
+ deriving (Eq,Show)
+
+data FragmentDefinition =
+ FragmentDefinition Name TypeCondition (Maybe [Directive]) SelectionSet
+ deriving (Eq,Show)
+
+type TypeCondition = NamedType
+
+-- * Values
+
+data Value = ValueVariable Variable
+ | ValueInt Int
+ | ValueFloat Float
+ | ValueString Text
+ | ValueBoolean Bool
+ | ValueEnum Name
+ | ValueList ListValue
+ | ValueObject ObjectValue
+ deriving (Eq,Show)
+
+newtype ListValue = ListValue [Value] deriving (Eq,Show)
+
+newtype ObjectValue = ObjectValue [ObjectField] deriving (Eq,Show)
+
+data ObjectField = ObjectField Name Value deriving (Eq,Show)
+
+type DefaultValue = Value
+
+-- * Directives
+
+data Directive = Directive Name (Maybe [Argument]) deriving (Eq,Show)
+
+-- * Type Reference
+
+data Type = TypeNamed NamedType
+ | TypeList ListType
+ | TypeNonNull NonNullType
+ deriving (Eq,Show)
+
+newtype NamedType = NamedType Name deriving (Eq,Show)
+
+newtype ListType = ListType Type deriving (Eq,Show)
+
+data NonNullType = NonNullTypeNamed NamedType
+ | NonNullTypeList ListType
+ deriving (Eq,Show)
+
+-- * Type definition
+
+data TypeDefinition = TypeDefinitionObject ObjectTypeDefinition
+ | TypeDefinitionInterface InterfaceTypeDefinition
+ | TypeDefinitionUnion UnionTypeDefinition
+ | TypeDefinitionScalar ScalarTypeDefinition
+ | TypeDefinitionEnum EnumTypeDefinition
+ | TypeDefinitionInputObject InputObjectTypeDefinition
+ | TypeDefinitionTypeExtension TypeExtensionDefinition
+ deriving (Eq,Show)
+
+data ObjectTypeDefinition = ObjectTypeDefinition Name (Maybe Interfaces) [FieldDefinition]
+ deriving (Eq,Show)
+
+type Interfaces = [NamedType]
+
+data FieldDefinition = FieldDefinition Name [InputValueDefinition]
+ deriving (Eq,Show)
+
+data InputValueDefinition = InputValueDefinition Name Type (Maybe DefaultValue)
+ deriving (Eq,Show)
+
+data InterfaceTypeDefinition = InterfaceTypeDefinition Name [FieldDefinition]
+ deriving (Eq,Show)
+
+data UnionTypeDefinition = UnionTypeDefinition Name [NamedType]
+ deriving (Eq,Show)
+
+data ScalarTypeDefinition = ScalarTypeDefinition Name
+ deriving (Eq,Show)
+
+data EnumTypeDefinition = EnumTypeDefinition Name [EnumValueDefinition]
+ deriving (Eq,Show)
+
+newtype EnumValueDefinition = EnumValueDefinition Name
+ deriving (Eq,Show)
+
+data InputObjectTypeDefinition = InputObjectTypeDefinition Name [InputValueDefinition]
+ deriving (Eq,Show)
+
+newtype TypeExtensionDefinition = TypeExtensionDefinition ObjectTypeDefinition
+ deriving (Eq,Show)