forked from OSS/graphql
5af7136893
This includes a rough port of the data types at https://github.com/graphql/graphql-js/blob/master/src/language/ast.js
141 lines
4.5 KiB
Haskell
141 lines
4.5 KiB
Haskell
module Data.GraphQL 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)
|