module Model.ServerObjectTypes where


-- | These are objects to represent GraphQL query roots.
type RootObjects = [RootObject]
type RootObject = NestedObject

-- | NestedObjects are the general object type. They are found as RootObjects or as object Subfields.
data NestedObject = NestedObject Alias Name ServerObject SubSelection SubFields
                    deriving Show
type Alias = Maybe String
type ServerObject = String
type SubSelection = Maybe ScalarType
type SubFields = [Field]
type Field = Either ScalarType NestedObject

-- | ScalarTypes are the other subfield type. They are also found at object attributes.
data ScalarType = ScalarType Alias Name Transformation Argument
               deriving (Show,Eq)
type Transformation = Maybe String
type Argument = Maybe String

type Name = String