summaryrefslogtreecommitdiff
path: root/src/Language/GraphQL/Validate.hs
diff options
context:
space:
mode:
authorEugen Wissner <belka@caraus.de>2020-09-18 07:32:58 +0200
committerEugen Wissner <belka@caraus.de>2020-09-18 07:32:58 +0200
commit9a08aa5de73e225a9a76017aee4886ce7f6eccec (patch)
tree6cdeadc16c994bcb3bd13764c1a7104c2cb56c09 /src/Language/GraphQL/Validate.hs
parent497b93c41b2534ec2b92b49e93267178417bef56 (diff)
downloadgraphql-9a08aa5de73e225a9a76017aee4886ce7f6eccec.tar.gz
Validate directives are unique per location
Diffstat (limited to 'src/Language/GraphQL/Validate.hs')
-rw-r--r--src/Language/GraphQL/Validate.hs9
1 files changed, 8 insertions, 1 deletions
diff --git a/src/Language/GraphQL/Validate.hs b/src/Language/GraphQL/Validate.hs
index 00ba629..ff2734d 100644
--- a/src/Language/GraphQL/Validate.hs
+++ b/src/Language/GraphQL/Validate.hs
@@ -15,6 +15,7 @@ module Language.GraphQL.Validate
import Control.Monad (join)
import Control.Monad.Trans.Class (MonadTrans(..))
import Control.Monad.Trans.Reader (runReaderT)
+import Data.Foldable (toList)
import Data.Sequence (Seq(..), (><), (|>))
import qualified Data.Sequence as Seq
import Language.GraphQL.AST.Document
@@ -185,7 +186,13 @@ fragmentSpread rule fragmentSpread'@(FragmentSpread _ directives' _)
applyToChildren = directives rule directives'
directives :: Traversable t => Rule m -> t Directive -> Seq (RuleT m)
-directives = foldMap . fmap pure . directive
+directives rule directives'
+ | DirectivesRule directivesRule <- rule =
+ applyToChildren |> directivesRule directiveList
+ | otherwise = applyToChildren
+ where
+ directiveList = toList directives'
+ applyToChildren = Seq.fromList $ fmap (directive rule) directiveList
directive :: Rule m -> Directive -> RuleT m
directive (ArgumentsRule _ rule) = rule