{-# LANGUAGE
    MultiParamTypeClasses
  , FlexibleInstances
  , FlexibleContexts
  , UndecidableInstances
  #-}

{-|

Module: Test.Serialization.Symbiote.Aeson
Copyright: (c) 2019 Athan Clark
License: BSD-3-Style
Maintainer: athan.clark@gmail.com
Portability: GHC

-}

module Test.Serialization.Symbiote.Aeson where

import Test.Serialization.Symbiote (SymbioteOperation, Symbiote (..), Operation)
import qualified Data.Aeson as Json
import qualified Data.Aeson.Types as Json

instance
  ( Json.ToJSON a
  , Json.FromJSON a
  , Json.ToJSON o
  , Json.FromJSON o
  , Json.ToJSON (Operation a)
  , Json.FromJSON (Operation a)
  , SymbioteOperation a o
  ) => Symbiote a o Json.Value where
  encode = Json.toJSON
  decode = Json.parseMaybe Json.parseJSON
  encodeOp = Json.toJSON
  decodeOp = Json.parseMaybe Json.parseJSON
  encodeOut _ = Json.toJSON
  decodeOut _ = Json.parseMaybe Json.parseJSON