{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE NoImplicitPrelude #-}
module Data.Morpheus.Parsing.Request.Operation
( parseOperation,
)
where
import Data.Morpheus.Internal.Utils
( empty,
)
import Data.Morpheus.Parsing.Internal.Internal
( Parser,
getLocation,
)
import Data.Morpheus.Parsing.Internal.Pattern
( optionalDirectives,
parseOperationType,
)
import Data.Morpheus.Parsing.Internal.Terms
( colon,
parseName,
parseType,
uniqTupleOpt,
varName,
)
import Data.Morpheus.Parsing.Internal.Value
( parseDefaultValue,
)
import Data.Morpheus.Parsing.Request.Selection
( parseSelectionSet,
)
import Data.Morpheus.Types.Internal.AST
( Operation (..),
OperationType (..),
RAW,
Variable (..),
VariableContent (..),
)
import Relude hiding (empty)
import Text.Megaparsec
( (<?>),
label,
)
variableDefinition :: Parser (Variable RAW)
variableDefinition :: Parser (Variable RAW)
variableDefinition =
String -> Parser (Variable RAW) -> Parser (Variable RAW)
forall e s (m :: * -> *) a.
MonadParsec e s m =>
String -> m a -> m a
label String
"VariableDefinition" (Parser (Variable RAW) -> Parser (Variable RAW))
-> Parser (Variable RAW) -> Parser (Variable RAW)
forall a b. (a -> b) -> a -> b
$
Position
-> Name 'FIELD -> TypeRef -> VariableContent CONST -> Variable RAW
forall (stage :: Stage).
Position
-> Name 'FIELD
-> TypeRef
-> VariableContent (CONST_OR_VALID stage)
-> Variable stage
Variable
(Position
-> Name 'FIELD -> TypeRef -> VariableContent CONST -> Variable RAW)
-> ParsecT MyError ByteString GQLResult Position
-> ParsecT
MyError
ByteString
GQLResult
(Name 'FIELD -> TypeRef -> VariableContent CONST -> Variable RAW)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ParsecT MyError ByteString GQLResult Position
getLocation
ParsecT
MyError
ByteString
GQLResult
(Name 'FIELD -> TypeRef -> VariableContent CONST -> Variable RAW)
-> ParsecT MyError ByteString GQLResult (Name 'FIELD)
-> ParsecT
MyError
ByteString
GQLResult
(TypeRef -> VariableContent CONST -> Variable RAW)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (ParsecT MyError ByteString GQLResult (Name 'FIELD)
varName ParsecT MyError ByteString GQLResult (Name 'FIELD)
-> ParsecT MyError ByteString GQLResult ()
-> ParsecT MyError ByteString GQLResult (Name 'FIELD)
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* ParsecT MyError ByteString GQLResult ()
colon)
ParsecT
MyError
ByteString
GQLResult
(TypeRef -> VariableContent CONST -> Variable RAW)
-> ParsecT MyError ByteString GQLResult TypeRef
-> ParsecT
MyError
ByteString
GQLResult
(VariableContent CONST -> Variable RAW)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> ParsecT MyError ByteString GQLResult TypeRef
parseType
ParsecT
MyError
ByteString
GQLResult
(VariableContent CONST -> Variable RAW)
-> ParsecT MyError ByteString GQLResult (VariableContent CONST)
-> Parser (Variable RAW)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Maybe ResolvedValue -> VariableContent CONST
DefaultValue (Maybe ResolvedValue -> VariableContent CONST)
-> ParsecT MyError ByteString GQLResult (Maybe ResolvedValue)
-> ParsecT MyError ByteString GQLResult (VariableContent CONST)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ParsecT MyError ByteString GQLResult ResolvedValue
-> ParsecT MyError ByteString GQLResult (Maybe ResolvedValue)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional ParsecT MyError ByteString GQLResult ResolvedValue
forall (s :: Stage). Parser (Value s)
parseDefaultValue)
parseOperationDefinition :: Parser (Operation RAW)
parseOperationDefinition :: Parser (Operation RAW)
parseOperationDefinition =
String -> Parser (Operation RAW) -> Parser (Operation RAW)
forall e s (m :: * -> *) a.
MonadParsec e s m =>
String -> m a -> m a
label String
"OperationDefinition" (Parser (Operation RAW) -> Parser (Operation RAW))
-> Parser (Operation RAW) -> Parser (Operation RAW)
forall a b. (a -> b) -> a -> b
$
Position
-> OperationType
-> Maybe (Name 'FIELD)
-> OrdMap (Name 'FIELD) (Variable RAW)
-> OrdMap (Name 'FIELD) (Directive RAW)
-> MergeMap 'True (Name 'FIELD) (Selection RAW)
-> Operation RAW
forall (s :: Stage).
Position
-> OperationType
-> Maybe (Name 'FIELD)
-> VariableDefinitions s
-> Directives s
-> SelectionSet s
-> Operation s
Operation
(Position
-> OperationType
-> Maybe (Name 'FIELD)
-> OrdMap (Name 'FIELD) (Variable RAW)
-> OrdMap (Name 'FIELD) (Directive RAW)
-> MergeMap 'True (Name 'FIELD) (Selection RAW)
-> Operation RAW)
-> ParsecT MyError ByteString GQLResult Position
-> ParsecT
MyError
ByteString
GQLResult
(OperationType
-> Maybe (Name 'FIELD)
-> OrdMap (Name 'FIELD) (Variable RAW)
-> OrdMap (Name 'FIELD) (Directive RAW)
-> MergeMap 'True (Name 'FIELD) (Selection RAW)
-> Operation RAW)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ParsecT MyError ByteString GQLResult Position
getLocation
ParsecT
MyError
ByteString
GQLResult
(OperationType
-> Maybe (Name 'FIELD)
-> OrdMap (Name 'FIELD) (Variable RAW)
-> OrdMap (Name 'FIELD) (Directive RAW)
-> MergeMap 'True (Name 'FIELD) (Selection RAW)
-> Operation RAW)
-> ParsecT MyError ByteString GQLResult OperationType
-> ParsecT
MyError
ByteString
GQLResult
(Maybe (Name 'FIELD)
-> OrdMap (Name 'FIELD) (Variable RAW)
-> OrdMap (Name 'FIELD) (Directive RAW)
-> MergeMap 'True (Name 'FIELD) (Selection RAW)
-> Operation RAW)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> ParsecT MyError ByteString GQLResult OperationType
parseOperationType
ParsecT
MyError
ByteString
GQLResult
(Maybe (Name 'FIELD)
-> OrdMap (Name 'FIELD) (Variable RAW)
-> OrdMap (Name 'FIELD) (Directive RAW)
-> MergeMap 'True (Name 'FIELD) (Selection RAW)
-> Operation RAW)
-> ParsecT MyError ByteString GQLResult (Maybe (Name 'FIELD))
-> ParsecT
MyError
ByteString
GQLResult
(OrdMap (Name 'FIELD) (Variable RAW)
-> OrdMap (Name 'FIELD) (Directive RAW)
-> MergeMap 'True (Name 'FIELD) (Selection RAW)
-> Operation RAW)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> ParsecT MyError ByteString GQLResult (Name 'FIELD)
-> ParsecT MyError ByteString GQLResult (Maybe (Name 'FIELD))
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional ParsecT MyError ByteString GQLResult (Name 'FIELD)
forall (t :: NAME). Parser (Name t)
parseName
ParsecT
MyError
ByteString
GQLResult
(OrdMap (Name 'FIELD) (Variable RAW)
-> OrdMap (Name 'FIELD) (Directive RAW)
-> MergeMap 'True (Name 'FIELD) (Selection RAW)
-> Operation RAW)
-> ParsecT
MyError ByteString GQLResult (OrdMap (Name 'FIELD) (Variable RAW))
-> ParsecT
MyError
ByteString
GQLResult
(OrdMap (Name 'FIELD) (Directive RAW)
-> MergeMap 'True (Name 'FIELD) (Selection RAW) -> Operation RAW)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser (Variable RAW)
-> ParsecT
MyError ByteString GQLResult (OrdMap (Name 'FIELD) (Variable RAW))
forall (map :: * -> * -> *) k a.
(FromList GQLResult map k a, Empty (map k a), KeyOf k a) =>
Parser a -> Parser (map k a)
uniqTupleOpt Parser (Variable RAW)
variableDefinition
ParsecT
MyError
ByteString
GQLResult
(OrdMap (Name 'FIELD) (Directive RAW)
-> MergeMap 'True (Name 'FIELD) (Selection RAW) -> Operation RAW)
-> ParsecT
MyError ByteString GQLResult (OrdMap (Name 'FIELD) (Directive RAW))
-> ParsecT
MyError
ByteString
GQLResult
(MergeMap 'True (Name 'FIELD) (Selection RAW) -> Operation RAW)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> ParsecT
MyError ByteString GQLResult (OrdMap (Name 'FIELD) (Directive RAW))
forall (s :: Stage). Parse (Value s) => Parser (Directives s)
optionalDirectives
ParsecT
MyError
ByteString
GQLResult
(MergeMap 'True (Name 'FIELD) (Selection RAW) -> Operation RAW)
-> ParsecT
MyError
ByteString
GQLResult
(MergeMap 'True (Name 'FIELD) (Selection RAW))
-> Parser (Operation RAW)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> ParsecT
MyError
ByteString
GQLResult
(MergeMap 'True (Name 'FIELD) (Selection RAW))
Parser (SelectionSet RAW)
parseSelectionSet
parseAnonymousQuery :: Parser (Operation RAW)
parseAnonymousQuery :: Parser (Operation RAW)
parseAnonymousQuery = String -> Parser (Operation RAW) -> Parser (Operation RAW)
forall e s (m :: * -> *) a.
MonadParsec e s m =>
String -> m a -> m a
label String
"AnonymousQuery" (Parser (Operation RAW) -> Parser (Operation RAW))
-> Parser (Operation RAW) -> Parser (Operation RAW)
forall a b. (a -> b) -> a -> b
$ do
Position
operationPosition <- ParsecT MyError ByteString GQLResult Position
getLocation
MergeMap 'True (Name 'FIELD) (Selection RAW)
operationSelection <- ParsecT
MyError
ByteString
GQLResult
(MergeMap 'True (Name 'FIELD) (Selection RAW))
Parser (SelectionSet RAW)
parseSelectionSet
Operation RAW -> Parser (Operation RAW)
forall (f :: * -> *) a. Applicative f => a -> f a
pure
( Operation :: forall (s :: Stage).
Position
-> OperationType
-> Maybe (Name 'FIELD)
-> VariableDefinitions s
-> Directives s
-> SelectionSet s
-> Operation s
Operation
{ operationName :: Maybe (Name 'FIELD)
operationName = Maybe (Name 'FIELD)
forall a. Maybe a
Nothing,
operationType :: OperationType
operationType = OperationType
Query,
operationArguments :: OrdMap (Name 'FIELD) (Variable RAW)
operationArguments = OrdMap (Name 'FIELD) (Variable RAW)
forall coll. Empty coll => coll
empty,
operationDirectives :: OrdMap (Name 'FIELD) (Directive RAW)
operationDirectives = OrdMap (Name 'FIELD) (Directive RAW)
forall coll. Empty coll => coll
empty,
MergeMap 'True (Name 'FIELD) (Selection RAW)
SelectionSet RAW
Position
operationSelection :: SelectionSet RAW
operationPosition :: Position
operationSelection :: MergeMap 'True (Name 'FIELD) (Selection RAW)
operationPosition :: Position
..
}
)
Parser (Operation RAW) -> String -> Parser (Operation RAW)
forall e s (m :: * -> *) a.
MonadParsec e s m =>
m a -> String -> m a
<?> String
"can't parse AnonymousQuery"
parseOperation :: Parser (Operation RAW)
parseOperation :: Parser (Operation RAW)
parseOperation = Parser (Operation RAW)
parseAnonymousQuery Parser (Operation RAW)
-> Parser (Operation RAW) -> Parser (Operation RAW)
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Parser (Operation RAW)
parseOperationDefinition