{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE NamedFieldPuns #-}
module Data.Morpheus.Parsing.Internal.Arguments (maybeArguments) where
import Data.Morpheus.Parsing.Internal.Internal
( Parser,
getLocation,
)
import Data.Morpheus.Parsing.Internal.Terms
( parseAssignment,
parseName,
uniqTupleOpt,
)
import Data.Morpheus.Parsing.Internal.Value
( Parse (..),
)
import Data.Morpheus.Types.Internal.AST
( Argument (..),
Arguments,
Value,
)
import Text.Megaparsec (label)
valueArgument :: Parse (Value s) => Parser (Argument s)
valueArgument =
label "Argument" $ do
argumentPosition <- getLocation
(argumentName, argumentValue) <- parseAssignment parseName parse
pure $ Argument {argumentName, argumentValue, argumentPosition}
maybeArguments :: Parse (Value s) => Parser (Arguments s)
maybeArguments =
label "Arguments" $
uniqTupleOpt valueArgument