diff options
| author | Matei Adriel <rafaeladriel11@gmail.com> | 2023-10-10 01:30:31 +0200 |
|---|---|---|
| committer | Eugen Wissner <belka@caraus.de> | 2023-11-04 13:46:10 +0100 |
| commit | a1cda38e20ae42ce771b056a1067eff75a0f25ad (patch) | |
| tree | 57f6169be16a7af34ca2d3b61fc227f2bbad0c31 /src/Language/GraphQL | |
| parent | 7c78497e044c8c10ac7ebb8bc1c5c479045b7e46 (diff) | |
| download | graphql-a1cda38e20ae42ce771b056a1067eff75a0f25ad.tar.gz | |
Fix values not being coerced to lists
Diffstat (limited to 'src/Language/GraphQL')
| -rw-r--r-- | src/Language/GraphQL/Execute.hs | 41 |
1 files changed, 16 insertions, 25 deletions
diff --git a/src/Language/GraphQL/Execute.hs b/src/Language/GraphQL/Execute.hs index bbacdd2..10772e7 100644 --- a/src/Language/GraphQL/Execute.hs +++ b/src/Language/GraphQL/Execute.hs @@ -556,33 +556,24 @@ coerceArgumentValues argumentDefinitions argumentValues = $ Just inputValue | otherwise -> throwM $ InputCoercionException (Text.unpack argumentName) variableType Nothing + matchFieldValues' = matchFieldValues coerceArgumentValue $ Full.node <$> argumentValues - coerceArgumentValue inputType (Transform.Int integer) = - coerceInputLiteral inputType (Type.Int integer) - coerceArgumentValue inputType (Transform.Boolean boolean) = - coerceInputLiteral inputType (Type.Boolean boolean) - coerceArgumentValue inputType (Transform.String string) = - coerceInputLiteral inputType (Type.String string) - coerceArgumentValue inputType (Transform.Float float) = - coerceInputLiteral inputType (Type.Float float) - coerceArgumentValue inputType (Transform.Enum enum) = - coerceInputLiteral inputType (Type.Enum enum) - coerceArgumentValue inputType Transform.Null - | In.isNonNullType inputType = Nothing - | otherwise = coerceInputLiteral inputType Type.Null - coerceArgumentValue (In.ListBaseType inputType) (Transform.List list) = - let coerceItem = coerceArgumentValue inputType - in Type.List <$> traverse coerceItem list - coerceArgumentValue (In.InputObjectBaseType inputType) (Transform.Object object) - | In.InputObjectType _ _ inputFields <- inputType = - let go = forEachField object - resultMap = HashMap.foldrWithKey go (pure mempty) inputFields - in Type.Object <$> resultMap - coerceArgumentValue _ (Transform.Variable variable) = pure variable - coerceArgumentValue _ _ = Nothing - forEachField object variableName (In.InputField _ variableType defaultValue) = - matchFieldValues coerceArgumentValue object variableName variableType defaultValue + + coerceArgumentValue inputType transform = + coerceInputLiteral inputType $ extractArgumentValue transform + + extractArgumentValue (Transform.Int integer) = Type.Int integer + extractArgumentValue (Transform.Boolean boolean) = Type.Boolean boolean + extractArgumentValue (Transform.String string) = Type.String string + extractArgumentValue (Transform.Float float) = Type.Float float + extractArgumentValue (Transform.Enum enum) = Type.Enum enum + extractArgumentValue Transform.Null = Type.Null + extractArgumentValue (Transform.List list) = + Type.List $ extractArgumentValue <$> list + extractArgumentValue (Transform.Object object) = + Type.Object $ extractArgumentValue <$> object + extractArgumentValue (Transform.Variable variable) = variable collectFields :: Monad m => Out.ObjectType m |
