{-# LANGUAGE CPP                        #-}

module Data.KeyStore.Types.AesonCompat
  ( module A
  , module Data.KeyStore.Types.AesonCompat
  ) where

import qualified Data.HashMap.Strict            as HM
import qualified Data.Text                      as T


#if MIN_VERSION_aeson(2,0,0)


import           Data.Aeson                     as A  hiding (Key)
import qualified Data.Aeson.Key                 as A
import qualified Data.Aeson.KeyMap              as A

type KM a = A.KeyMap a

fromKM :: KM a -> HM.HashMap T.Text a
fromKM :: forall a. KM a -> HashMap Text a
fromKM = forall k2 k1 v.
(Eq k2, Hashable k2) =>
(k1 -> k2) -> HashMap k1 v -> HashMap k2 v
HM.mapKeys Key -> Text
A.toText forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall v. KeyMap v -> HashMap Key v
A.toHashMap

intoKM :: HM.HashMap T.Text a -> KM a
intoKM :: forall a. HashMap Text a -> KM a
intoKM = forall v. HashMap Key v -> KeyMap v
A.fromHashMap forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall k2 k1 v.
(Eq k2, Hashable k2) =>
(k1 -> k2) -> HashMap k1 v -> HashMap k2 v
HM.mapKeys Text -> Key
A.fromText


#else


import           Data.Aeson                     as A

type KM a = HM.HashMap T.Text a

fromKM :: KM a -> HM.HashMap T.Text a
fromKM = id

intoKM :: HM.HashMap T.Text a -> KM a
intoKM = id


#endif