From df078a59d0ea80b383df251a789df8f6f539b072 Mon Sep 17 00:00:00 2001 From: Eugen Wissner Date: Wed, 22 Dec 2021 08:56:01 +0100 Subject: [PATCH] Add Serialize and VariableValue value instances - `Serialize` instance for `Type.Definition.Value`. - `VariableValue` instance for `Type.Definition.Value`. It makes it possible to use the library without an additional serialization format like JSON. --- CHANGELOG.md | 6 ++++++ src/Language/GraphQL/Execute/Coerce.hs | 18 ++++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index d22456c..dbcf594 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,11 @@ The format is based on and this project adheres to [Haskell Package Versioning Policy](https://pvp.haskell.org/). +## [Unreleased] +### Added +- `Serialize` instance for `Type.Definition.Value`. +- `VariableValue` instance for `Type.Definition.Value`. + ## [1.0.1.0] - 2021-09-27 ### Added - Custom `Show` instance for `Type.Definition.Value` (for error @@ -459,6 +464,7 @@ and this project adheres to ### Added - Data types for the GraphQL language. +[Unreleased]: https://www.caraus.tech/projects/pub-graphql/repository/23/diff?rev=master&rev_to=v1.0.1.0 [1.0.1.0]: https://www.caraus.tech/projects/pub-graphql/repository/23/diff?rev=v1.0.1.0&rev_to=v1.0.0.0 [1.0.0.0]: https://www.caraus.tech/projects/pub-graphql/repository/23/diff?rev=v1.0.0.0&rev_to=v0.11.1.0 [0.11.1.0]: https://www.caraus.tech/projects/pub-graphql/repository/23/diff?rev=v0.11.1.0&rev_to=v0.11.0.0 diff --git a/src/Language/GraphQL/Execute/Coerce.hs b/src/Language/GraphQL/Execute/Coerce.hs index f5ee204..9d5af96 100644 --- a/src/Language/GraphQL/Execute/Coerce.hs +++ b/src/Language/GraphQL/Execute/Coerce.hs @@ -3,6 +3,7 @@ obtain one at https://mozilla.org/MPL/2.0/. -} {-# LANGUAGE ExplicitForAll #-} +{-# LANGUAGE LambdaCase #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE ViewPatterns #-} @@ -61,6 +62,9 @@ class VariableValue a where -> a -- ^ Variable value being coerced. -> Maybe Type.Value -- ^ Coerced value on success, 'Nothing' otherwise. +instance VariableValue Type.Value where + coerceVariableValue = const Just + instance VariableValue Aeson.Value where coerceVariableValue _ Aeson.Null = Just Type.Null coerceVariableValue (In.ScalarBaseType scalarType) value @@ -216,6 +220,20 @@ data Output a instance forall a. IsString (Output a) where fromString = String . fromString +instance Serialize Type.Value where + null = Type.Null + serialize _ = \case + Int int -> Just $ Type.Int int + Float float -> Just $ Type.Float float + String string -> Just $ Type.String string + Boolean boolean -> Just $ Type.Boolean boolean + Enum enum -> Just $ Type.Enum enum + List list -> Just $ Type.List list + Object object -> Just + $ Type.Object + $ HashMap.fromList + $ OrderedMap.toList object + instance Serialize Aeson.Value where serialize (Out.ScalarBaseType scalarType) value | Type.ScalarType "Int" _ <- scalarType