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