packages feed

composite-aeson-0.8.2.2: src/Composite/Aeson/Compat.hs

module Composite.Aeson.Compat 
  ( CompositeFormat(..)
  ) where

import Composite.Aeson.Base (parseJsonWithFormat', toJsonWithFormat)
import Composite.Aeson.Formats.Default (DefaultJsonFormat(..))
import Data.Aeson (FromJSON(..), ToJSON(..))

newtype CompositeFormat a = CompositeFormat {unCompositeFormat :: a}

instance DefaultJsonFormat a => FromJSON (CompositeFormat a) where
  parseJSON = fmap CompositeFormat . parseJsonWithFormat' defaultJsonFormat

instance DefaultJsonFormat a => ToJSON (CompositeFormat a) where
  toJSON = toJsonWithFormat defaultJsonFormat . unCompositeFormat