forked from OSS/graphql
		
	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.
This commit is contained in:
		| @@ -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 | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
		Reference in New Issue
	
	Block a user