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