{-# LANGUAGE CPP #-}

module Test.WebDriver.Util.Aeson (
  aesonToList
  , aesonLookup
  , aesonKeyFromText
  ) where

import Data.Text (Text)


#if MIN_VERSION_aeson(2,0,0)
import qualified Data.Aeson.Key as A
import qualified Data.Aeson.KeyMap as KM

aesonToList :: KM.KeyMap v -> [(A.Key, v)]
aesonToList :: forall v. KeyMap v -> [(Key, v)]
aesonToList = KeyMap v -> [(Key, v)]
forall v. KeyMap v -> [(Key, v)]
KM.toList

aesonLookup :: Text -> KM.KeyMap v -> Maybe v
aesonLookup :: forall v. Text -> KeyMap v -> Maybe v
aesonLookup = Key -> KeyMap v -> Maybe v
forall v. Key -> KeyMap v -> Maybe v
KM.lookup (Key -> KeyMap v -> Maybe v)
-> (Text -> Key) -> Text -> KeyMap v -> Maybe v
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text -> Key
A.fromText

aesonKeyFromText :: Text -> A.Key
aesonKeyFromText :: Text -> Key
aesonKeyFromText = Text -> Key
A.fromText
#else
import qualified Data.HashMap.Strict        as HM

aesonToList :: HM.KeyMap v -> [(A.Key, v)]
aesonToList = HM.toList

aesonLookup :: (Eq k, Hashable k) => k -> HM.HashMap k v -> Maybe v
aesonLookup = HM.lookup

aesonKeyFromText :: Text -> Text
aesonKeyFromText = id
#endif