diff options
| author | Eugen Wissner <belka@caraus.de> | 2020-09-18 07:32:58 +0200 |
|---|---|---|
| committer | Eugen Wissner <belka@caraus.de> | 2020-09-18 07:32:58 +0200 |
| commit | 9a08aa5de73e225a9a76017aee4886ce7f6eccec (patch) | |
| tree | 6cdeadc16c994bcb3bd13764c1a7104c2cb56c09 /src/Language/GraphQL/Validate.hs | |
| parent | 497b93c41b2534ec2b92b49e93267178417bef56 (diff) | |
| download | graphql-9a08aa5de73e225a9a76017aee4886ce7f6eccec.tar.gz | |
Validate directives are unique per location
Diffstat (limited to 'src/Language/GraphQL/Validate.hs')
| -rw-r--r-- | src/Language/GraphQL/Validate.hs | 9 |
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 |
