Added documentation of functions and modules and included tutorial.lhs.

This commit is contained in:
solrun
2016-03-09 01:15:46 +01:00
parent d195389102
commit 61d6af7778
7 changed files with 98 additions and 5 deletions

View File

@ -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