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)
type Document = NonEmpty Operation
data Operation
= Query (Maybe Text) (Seq Selection)
| Mutation (Maybe Text) (Seq Selection)
deriving (Eq, Show)
data Field
= Field (Maybe Alias) Name Arguments (Seq Selection)
deriving (Eq, Show)
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
data Directive = Directive Name Arguments
deriving (Eq, Show)
data Fragment
= Fragment TypeCondition (Seq Selection)
deriving (Eq, Show)
data Selection
= SelectionFragment Fragment
| SelectionField Field
deriving (Eq, Show)
data Value
= Int Int32
| Float Double
| String Text
| Boolean Bool
| Null
| Enum Name
| List [Value]
| Object (HashMap Name Value)
deriving (Eq, Show)
instance IsString Value where
fromString = String . fromString