forked from OSS/graphql
79 lines
1.9 KiB
Haskell
79 lines
1.9 KiB
Haskell
-- | This is the AST meant to be executed.
|
|
module Language.GraphQL.AST.Core
|
|
( Alias
|
|
, Arguments(..)
|
|
, Directive(..)
|
|
, Document
|
|
, Field(..)
|
|
, Fragment(..)
|
|
, Name
|
|
, Operation(..)
|
|
, Selection(..)
|
|
, TypeCondition
|
|
, Value(..)
|
|
) where
|
|
|
|
import Data.Int (Int32)
|
|
import Data.HashMap.Strict (HashMap)
|
|
import Data.List.NonEmpty (NonEmpty)
|
|
import Data.Sequence (Seq)
|
|
import Data.String (IsString(..))
|
|
import Data.Text (Text)
|
|
import Language.GraphQL.AST (Alias, Name, TypeCondition)
|
|
|
|
-- | GraphQL document is a non-empty list of operations.
|
|
type Document = NonEmpty Operation
|
|
|
|
-- | GraphQL has 3 operation types: queries, mutations and subscribtions.
|
|
--
|
|
-- Currently only queries and mutations are supported.
|
|
data Operation
|
|
= Query (Maybe Text) (Seq Selection)
|
|
| Mutation (Maybe Text) (Seq Selection)
|
|
deriving (Eq, Show)
|
|
|
|
-- | Single GraphQL field.
|
|
data Field
|
|
= Field (Maybe Alias) Name Arguments (Seq Selection)
|
|
deriving (Eq, Show)
|
|
|
|
-- | Argument list.
|
|
newtype Arguments = Arguments (HashMap Name Value)
|
|
deriving (Eq, Show)
|
|
|
|
instance Semigroup Arguments where
|
|
(Arguments x) <> (Arguments y) = Arguments $ x <> y
|
|
|
|
instance Monoid Arguments where
|
|
mempty = Arguments mempty
|
|
|
|
-- | Directive.
|
|
data Directive = Directive Name Arguments
|
|
deriving (Eq, Show)
|
|
|
|
-- | Represents fragments and inline fragments.
|
|
data Fragment
|
|
= Fragment TypeCondition (Seq Selection)
|
|
deriving (Eq, Show)
|
|
|
|
-- | Single selection element.
|
|
data Selection
|
|
= SelectionFragment Fragment
|
|
| SelectionField Field
|
|
deriving (Eq, Show)
|
|
|
|
-- | Represents accordingly typed GraphQL values.
|
|
data Value
|
|
= Int Int32
|
|
| Float Double -- ^ GraphQL Float is double precision
|
|
| String Text
|
|
| Boolean Bool
|
|
| Null
|
|
| Enum Name
|
|
| List [Value]
|
|
| Object (HashMap Name Value)
|
|
deriving (Eq, Show)
|
|
|
|
instance IsString Value where
|
|
fromString = String . fromString
|