summaryrefslogtreecommitdiff
path: root/Data/GraphQL/Execute.hs
diff options
context:
space:
mode:
authorsolrun <solalola@gmail.com>2016-03-09 01:15:46 +0100
committersolrun <solalola@gmail.com>2016-03-14 01:42:55 +0100
commit61d6af777897d918decc0ab8ef6456e05fccbe7b (patch)
treede8594ed3874facf5ca8f9fe4d75f21fc5be3506 /Data/GraphQL/Execute.hs
parentd1953891029a71115ee572b7b3798072cbaf2ea8 (diff)
downloadgraphql-61d6af777897d918decc0ab8ef6456e05fccbe7b.tar.gz
Added documentation of functions and modules and included tutorial.lhs.
Diffstat (limited to 'Data/GraphQL/Execute.hs')
-rw-r--r--Data/GraphQL/Execute.hs20
1 files changed, 16 insertions, 4 deletions
diff --git a/Data/GraphQL/Execute.hs b/Data/GraphQL/Execute.hs
index e5998e9..a0436f6 100644
--- a/Data/GraphQL/Execute.hs
+++ b/Data/GraphQL/Execute.hs
@@ -1,5 +1,6 @@
{-# LANGUAGE CPP #-}
-{-# LANGUAGE OverloadedStrings #-}
+-- | This module provides the function execute which executes a GraphQL
+-- request according to a given GraphQL schema.
module Data.GraphQL.Execute (execute) where
#if !MIN_VERSION_base(4,8,0)
@@ -22,17 +23,25 @@ import Data.GraphQL.Error
Returns the result of the query against the schema wrapped in a
"data" field, or errors wrapped in a "errors field".
-}
-execute :: Alternative m
- => Schema.Schema m -> Schema.Subs -> Document -> m Aeson.Value
+execute :: Alternative f
+ => Schema.Schema f -> Schema.Subs -> Document -> f Aeson.Value
execute (Schema resolvs) subs doc = runCollectErrs res
where res = Schema.resolvers resolvs $ rootFields subs doc
-
+-- | rootFields takes in a substitution and a GraphQL document.
+-- If the document contains one query (and no other definitions)
+-- it applies the substitution to the query's set of selections
+-- and then returns their fields.
rootFields :: Schema.Subs -> Document -> [Field]
rootFields subs (Document [DefinitionOperation (Query (Node _varDefs _ _ sels))]) =
Schema.fields $ substitute subs <$> sels
rootFields _ _ = []
+-- | substitute takes in a substitution and a selection.
+-- If the selection is a field it applies the substitution to the
+-- field's arguments using subsArg,
+-- and recursively applies the substitution to the arguments of fields
+-- nested in the primary field.
substitute :: Schema.Subs -> Selection -> Selection
substitute subs (SelectionField (Field alias name args directives sels)) =
SelectionField $ Field
@@ -45,6 +54,9 @@ substitute subs (SelectionField (Field alias name args directives sels)) =
substitute _ sel = sel
-- TODO: Support different value types
+-- | subsArg takes in a substitution and an argument.
+-- If the argument's value is a variable the substitution
+-- is applied to the variable's name.
subsArg :: Schema.Subs -> Argument -> Maybe Argument
subsArg subs (Argument n (ValueVariable (Variable v))) =
Argument n . ValueString <$> subs v