module Data.Morpheus.Types.Query.RawSelection
  ( RawArgument(..)
  , RawArguments
  , RawSelectionSet
  , RawSelection(..)
  ) where

import           Data.Morpheus.Types.Core     (Collection, Key)
import           Data.Morpheus.Types.JSType   (JSType)
import           Data.Morpheus.Types.MetaInfo (Position)

data RawArgument
  = VariableReference Key
                      Position
  | Argument JSType
             Position
  deriving (Show)

type RawArguments = Collection RawArgument

type RawSelectionSet = Collection RawSelection

data RawSelection
  = RawSelectionSet RawArguments
                    RawSelectionSet
                    Position
  | RawField RawArguments
             Key
             Position
  | Spread Key
           Position
  deriving (Show)