morpheus-graphql-core-0.18.0: src/Data/Morpheus/Parsing/Internal/Arguments.hs
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE NoImplicitPrelude #-}
module Data.Morpheus.Parsing.Internal.Arguments (maybeArguments) where
-- MORPHEUS
import Data.Morpheus.Parsing.Internal.Internal
( Parser,
getLocation,
)
import Data.Morpheus.Parsing.Internal.Terms
( colon,
parseName,
uniqTupleOpt,
)
import Data.Morpheus.Parsing.Internal.Value
( Parse (..),
)
import Data.Morpheus.Types.Internal.AST
( Argument (..),
Arguments,
Value,
)
import Relude
import Text.Megaparsec (label)
-- Arguments : https://graphql.github.io/graphql-spec/June2018/#sec-Language.Arguments
--
-- Arguments[Const]
-- ( Argument[Const](list) )
--
-- Argument[Const]
-- Name : Value[Const]
valueArgument :: Parse (Value s) => Parser (Argument s)
valueArgument =
label "Argument" $
Argument
<$> getLocation
<*> (parseName <* colon)
<*> parse
{-# INLINEABLE valueArgument #-}
maybeArguments :: Parse (Value s) => Parser (Arguments s)
maybeArguments =
label "Arguments" $
uniqTupleOpt valueArgument
{-# INLINEABLE maybeArguments #-}