diff options
| author | Eugen Wissner <belka@caraus.de> | 2019-12-30 18:26:24 +0100 |
|---|---|---|
| committer | Eugen Wissner <belka@caraus.de> | 2019-12-30 18:26:24 +0100 |
| commit | 44dc80bb37558fc6a35b22791ac407b63956176d (patch) | |
| tree | b1ffed820212030e5f7493c17fc6a1c23722a358 /src | |
| parent | fdf5914626ad172a8a459696f0114ef990c0d5cb (diff) | |
| download | graphql-44dc80bb37558fc6a35b22791ac407b63956176d.tar.gz | |
Replace substitution function with a map
It makes using variables with queries more approachable, but some work
still has to be done.
- The type `Subs` should be renamed and moved out of `Schema`, together with
`AST.Core.Value` probably.
- Some kind of conversion should be possible from a user-defined input
type T to the Value. So the final HashMap should have a type like
`HashMap name a`, where a is an instance of a potential typeclass
InputType.
Diffstat (limited to 'src')
| -rw-r--r-- | src/Language/GraphQL.hs | 2 | ||||
| -rw-r--r-- | src/Language/GraphQL/Execute/Transform.hs | 6 | ||||
| -rw-r--r-- | src/Language/GraphQL/Schema.hs | 5 |
3 files changed, 6 insertions, 7 deletions
diff --git a/src/Language/GraphQL.hs b/src/Language/GraphQL.hs index afce8aa..952f8ac 100644 --- a/src/Language/GraphQL.hs +++ b/src/Language/GraphQL.hs @@ -20,7 +20,7 @@ graphql :: MonadIO m => NonEmpty (Schema.Resolver m) -- ^ Resolvers. -> T.Text -- ^ Text representing a @GraphQL@ request document. -> m Aeson.Value -- ^ Response. -graphql = flip graphqlSubs $ const Nothing +graphql = flip graphqlSubs mempty -- | If the text parses correctly as a @GraphQL@ query the substitution is -- applied to the query and the query is then executed using to the given diff --git a/src/Language/GraphQL/Execute/Transform.hs b/src/Language/GraphQL/Execute/Transform.hs index 7c2e100..a85e451 100644 --- a/src/Language/GraphQL/Execute/Transform.hs +++ b/src/Language/GraphQL/Execute/Transform.hs @@ -11,7 +11,7 @@ module Language.GraphQL.Execute.Transform import Control.Arrow (first) import Control.Monad (foldM, unless) import Control.Monad.Trans.Class (lift) -import Control.Monad.Trans.Reader (ReaderT, ask, runReaderT) +import Control.Monad.Trans.Reader (ReaderT, asks, runReaderT) import Control.Monad.Trans.State (StateT, evalStateT, gets, modify) import Data.HashMap.Strict (HashMap) import qualified Data.HashMap.Strict as HashMap @@ -155,9 +155,7 @@ argument :: Full.Argument -> TransformT Core.Argument argument (Full.Argument n v) = Core.Argument n <$> value v value :: Full.Value -> TransformT Core.Value -value (Full.Variable n) = do - substitute' <- lift ask - lift . lift $ substitute' n +value (Full.Variable name) = lift (asks $ HashMap.lookup name) >>= lift . lift value (Full.Int i) = pure $ Core.Int i value (Full.Float f) = pure $ Core.Float f value (Full.String x) = pure $ Core.String x diff --git a/src/Language/GraphQL/Schema.hs b/src/Language/GraphQL/Schema.hs index fa8bf78..facf722 100644 --- a/src/Language/GraphQL/Schema.hs +++ b/src/Language/GraphQL/Schema.hs @@ -44,8 +44,9 @@ data Resolver m = Resolver Text -- ^ Name (Field -> CollectErrsT m Aeson.Object) -- ^ Resolver --- | Variable substitution function. -type Subs = Name -> Maybe Value +-- | Contains variables for the query. The key of the map is a variable name, +-- and the value is the variable value. +type Subs = HashMap Name Value -- | Create a new 'Resolver' with the given 'Name' from the given 'Resolver's. object :: MonadIO m => Name -> ActionT m [Resolver m] -> Resolver m |
