packages feed

hpqtypes-1.9.3.0: test/Test/Aeson/Compat.hs

{-# LANGUAGE CPP #-}
{-# LANGUAGE DerivingStrategies #-}
module Test.Aeson.Compat
  ( fromList
  , Value0
  , mkValue0
  ) where

import Data.Aeson
import Data.Text (Text)

#if MIN_VERSION_aeson(2,0,0)

import Data.Bifunctor (first)
import qualified Data.Aeson.Key as K
import qualified Data.Aeson.KeyMap as KM

import Database.PostgreSQL.PQTypes.Internal.C.Types
import Database.PostgreSQL.PQTypes

fromList :: [(Text, v)] -> KM.KeyMap v
fromList = KM.fromList . map (first K.fromText)

newtype Value0 = Value0 { unValue0 :: Value }
  deriving newtype (Eq, Show)

instance ToSQL (JSON Value0) where
  type PQDest (JSON Value0) = PGbytea
  toSQL = aesonToSQL . unValue0 . unJSON

instance FromSQL (JSON Value0) where
  type PQBase (JSON Value0) = PGbytea
  fromSQL = fmap (JSON . Value0) . aesonFromSQL

instance ToSQL (JSONB Value0) where
  type PQDest (JSONB Value0) = PGbytea
  toSQL = aesonToSQL . unValue0 . unJSONB

instance FromSQL (JSONB Value0) where
  type PQBase (JSONB Value0) = PGbytea
  fromSQL = fmap (JSONB . Value0) . aesonFromSQL

mkValue0 :: Value -> Value0
mkValue0 = Value0

#else

import qualified Data.HashMap.Strict as HM

fromList :: [(Text, v)] -> HM.HashMap Text v
fromList = HM.fromList

type Value0 = Value

mkValue0 :: Value0 -> Value0
mkValue0 = id

#endif