diff options
Diffstat (limited to 'src/Language')
| -rw-r--r-- | src/Language/GraphQL/Validate.hs | 12 | ||||
| -rw-r--r-- | src/Language/GraphQL/Validate/Rules.hs | 6 |
2 files changed, 16 insertions, 2 deletions
diff --git a/src/Language/GraphQL/Validate.hs b/src/Language/GraphQL/Validate.hs index 6df97a1..5768615 100644 --- a/src/Language/GraphQL/Validate.hs +++ b/src/Language/GraphQL/Validate.hs @@ -5,6 +5,7 @@ {-# LANGUAGE ExplicitForAll #-} {-# LANGUAGE LambdaCase #-} +-- | GraphQL validator. module Language.GraphQL.Validate ( Error(..) , Path(..) @@ -29,17 +30,24 @@ data Context m = Context type ValidateT m = Reader (Context m) (Seq Error) +-- | If an error can be associated to a particular field in the GraphQL result, +-- it must contain an entry with the key path that details the path of the +-- response field which experienced the error. This allows clients to identify +-- whether a null result is intentional or caused by a runtime error. data Path - = Segment Text - | Index Int + = Segment Text -- ^ Field name. + | Index Int -- ^ List index if a field returned a list. deriving (Eq, Show) +-- | Validation error. data Error = Error { message :: String , locations :: [Location] , path :: [Path] } deriving (Eq, Show) +-- | Validates a document and returns a list of found errors. If the returned +-- list is empty, the document is valid. document :: forall m. Schema m -> [Rule] -> Document -> Seq Error document schema' rules' document' = runReader (foldrM go Seq.empty document') context diff --git a/src/Language/GraphQL/Validate/Rules.hs b/src/Language/GraphQL/Validate/Rules.hs index bc754c2..a3314e7 100644 --- a/src/Language/GraphQL/Validate/Rules.hs +++ b/src/Language/GraphQL/Validate/Rules.hs @@ -2,6 +2,7 @@ v. 2.0. If a copy of the MPL was not distributed with this file, You can obtain one at https://mozilla.org/MPL/2.0/. -} +-- | This module contains default rules defined in the GraphQL specification. module Language.GraphQL.Validate.Rules ( Rule(..) , executableDefinitionsRule @@ -10,14 +11,19 @@ module Language.GraphQL.Validate.Rules import Language.GraphQL.AST.Document +-- | 'Rule' assigns a function to each AST node that can be validated. If the +-- validation fails, the function should return an error message, or 'Nothing' +-- otherwise. newtype Rule = DefinitionRule (Definition -> Maybe String) +-- | Default reules given in the specification. specifiedRules :: [Rule] specifiedRules = [ executableDefinitionsRule ] +-- | Definition must be OperationDefinition or FragmentDefinition. executableDefinitionsRule :: Rule executableDefinitionsRule = DefinitionRule go where |
